Ich weiß, dass die Angabe einer zusätzlichen Grenze, wenn die erste Grenze ein Typparameter ist, in Java nicht möglich ist; Ich frage mich jedoch, ob jemand einen alternativen Weg kennt, etwas Ähnliches zu tun und es zur Kompilierzeit sicher zu halten? Ich habe unten ein Beispiel angegeben.Gibt es eine alternative Möglichkeit, eine zusätzliche Grenze anzugeben, wenn die erste Grenze ein Typparameter ist?
In dem folgenden Code, was ich meine, ist dies: <E extends T & Comparable<T>>
. In dieser Situation möchte ich den eingebauten Komparator verwenden können, wenn der Typ T
vergleichbar ist, anderenfalls möchte ich meinen eigenen Komparator angeben.
Gibt es einen alternativen Weg dies zu tun, während die Typ-Sicherheit zur Kompilierzeit beibehalten wird?
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;
}
}
Schöner Tipp mit dem 'Comparator.naturalOrder();'! –