我有接口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实例。
可能我必须使用泛型,但是怎么样?
答案 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>
。