这SO discussion提出以下成语:
public interface IComparable<T extends IComparable<T>> {
int compare(T t);
}
然后允许:
public class Foo implements IComparable<Foo> {
public int compare(Foo foo) {
return 0;
}
}
但是,这个习语允许的不仅仅是上面的,因为下面的代码也可以编译:
class A implements IComparable<A> {
public int compare(A a) {return 0;}
}
public class Foo implements IComparable<A> {
public int compare(A a) {
return 0;
}
}
因此(除非我误解了什么)与远不那么戏剧化的成语相比,原始成语并没有真正买到任何东西:
public interface IComparesWith<T> {
int compare(T t);
}
public class A implements IComparesWith<A> {
public int compare(A a) {...}
}
那么,有没有一种方法可以实际声明一个接口(interface),使得任何声明实现它的类都有一个方法来与它自己的类的对象进行比较,而没有任何像上面那样的漏洞?
我显然不能将以上内容作为评论发布,因此我创建了一个新帖子。
最佳答案
不,这种限制对于所写的泛型是不可能的。您的评估对我来说似乎是正确的。
关于java - 我怎样才能让一个接口(interface)实例方法只接受同一个类的参数,真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553621/