声明接口方法以仅允许实现的类

时间:2014-03-29 19:53:16

标签: java generics methods interface restriction

我有接口Syncable:

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实例。

可能我必须使用泛型,但是怎么样?

2 个答案:

答案 0 :(得分:2)

使您的界面通用:

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

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

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

答案 1 :(得分:0)

类似于Comparable,您可以这样做:

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

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

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

如果有一个泛型类或方法要求类型参数T可以自身同步,那么该类或方法将声明绑定T extends Syncable<? super T>