6
最初の境界が型パラメータであるときに追加の境界を指定することはJavaでは不可能です。しかし、コンパイル時に誰かが同様のやり方をして安全に保つための別の方法を知っているかどうかは疑問でした。私は以下の例を提供しました。最初の境界が型パラメータの場合に、追加の境界を指定する別の方法はありますか?
次のコードでは、私が参照しているのは<E extends T & Comparable<T>>
です。このような状況では、T
の型が匹敵する場合には、inbuiltコンパレータを使用できるようにしたい。そうでなければ、私自身のコンパレータを指定したい。
コンパイル時に型安全性を維持しながらこれを行う別の方法はありますか?
public class ExampleClass<T, U> {
[...]
public <E extends T & Comparable<T>> ExampleClass(Function<U, E> function) {
this.function = function;
this.comparator = (E a, E b) -> a.compareTo(b);
}
public ExampleClass(Function<U, T> function, Comparator<U> comparator) {
this.function = function;
this.comparator = comparator;
}
}
「Comparator.naturalOrder();」という素晴らしいヒント! –