特定のタイプのIDを持つ具象クラスを作成するために拡張する抽象ジェネリックスーパークラスがあります。
public abstract class AbstractEntity<I> {
...
private I id;
private String name;
...
}
次のような具象クラスを作成します。
public class User extends AbstractEntity<Long> {...}
ここで、具体的なクラスをそれ自体の他のインスタンスと比較できるようにしたいと考えています (他の型はありません。これはコンパイル時に適用する必要があります)。デフォルトでは、compareTo
メソッドは名前でソートする必要があるため、コードの繰り返しを避けるためにスーパークラスに追加したいと考えています。これを行うために私が思いついた唯一の方法は、この醜い構造を使用することです。
public abstract class AbstractEntity<I,T> implements Comparable<AbstractEntity<I,T>> {
...
private I id;
private String name;
...
@Override
public int compareTo(AbstractEntity<I,T> o) {
...
}
}
...
public class User extends AbstractEntity<Long,User> {...}
スーパークラスを拡張するために、具体的なクラス名をそれ自体の型パラメーターとしてもう一度繰り返す必要があるため、これは醜いと思います。これは奇妙で直感に反します。私が見逃しているのと同じことを達成するためのよりエレガントな方法はありますか?
ありがとう!