java - 声明接口(interface)方法仅允许实现的类

标签 java generics methods interface restriction

我有可同步的接口(interface):

public interface Syncable{
    public void sync(Syncable other);
}

以及两个实现的类:

public class TstA implements Syncable{
    @Override
    public void sync(Syncable other) {
        // TODO Auto-generated method stub      
    }
}

public class TstB implements Syncable{
    @Override
    public void sync(Syncable other) {
        // TODO Auto-generated method stub      
    }
}

所以这段代码是合法的:

TstA a = new TstA();
TstB b = new TstB();
a.sync(b);

这不是我想要的。我想允许 a.sync 接收 TstA 的实例,b.sync 接收 TstB 的实例。

也许我必须使用泛型,但是如何使用?

最佳答案

使您的界面通用:

public interface Syncable<T extends Syncable<T>> {
    public void sync(T other);
}

并实现该接口(interface)的参数化实例:

public class TstA implements Syncable<TstA> {
    @Override
    public void sync(TstA other) {
        // TODO Auto-generated method stub      
    }
}

关于java - 声明接口(interface)方法仅允许实现的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736078/

相关文章:

c# - 使用泛型将其声明为 Button 但被视为类内部的 Control。为什么?

java - 使用 Swing 计时器和 ImageIcons

java - 使用 HQL 从 select 中的子选择创建对象列表

java - 可以将 “literals”值与 “INSERT INTO”中的select语句组合

c# - C# 4.0 中的协变和逆变推理

Java - 使用 WatchEvent 抑制未经检查的转换警告是否安全?

Jquery 将方法发送到函数 "Object [object DOMWindow] has no method ' 每个'"

java - 使用非静态类方法而不引用

java - 为什么这个方法需要这么多内存?

Javassist 似乎生成无效的字段访问代码