この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) {...}
}
では、上記のような抜け穴なしで、実装を宣言するクラスが独自のクラスのオブジェクトと比較するメソッドを持つように、実際にインターフェイスを宣言する方法はありますか?
上記をコメントとして投稿できなかったため、新しい投稿を作成しました。