这个SO 讨论提出了以下成语:
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) {...}
}
那么,有没有一种方法可以实际声明一个接口,使得任何声明实现它的类都有一个方法来与它自己的类的对象进行比较,而没有任何上述漏洞?
我显然无法将以上内容作为评论发布,因此我创建了一个新帖子。