如何創建一個泛型類來引用嵌套的泛型類型?如何在Java中使用泛型來引用嵌套類型?
我想創建一個Comparator類,它可以比較B的內部類型而不想公開這些類型是什麼。在下面的例子中,我得到粗鑄件我的T內部嵌套值的編譯器警告可比:
public class SSCCE {
// Compare my A instances.
class AComparator<T extends B> implements Comparator<T> {
@Override
public int compare(final T o1, final T o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
class A extends B<Integer> {
@Override Integer getValue() { return 1; }
}
class A2 extends B<String> {
@Override String getValue() { return "Test String!"; }
}
abstract class B<T extends Comparable<T>> {
abstract T getValue();
}
public static void main(String[] args) {
SSCCE sscce = new SSCCE();
AComparator<A> comparator = sscce.new AComparator<>();
comparator.compare(sscce.new A(), sscce.new A());
}
}
是否有可能使用到放心地讓鑄造代表內在價值?
事情我已經嘗試:
創建一個通配符可比性(不可編譯):
class AComparator2<T extends B<? extends Comparable<?>>> implements Comparator<T> { @Override public int compare(final T o1, final T o2) { Comparable<?> o1value = (Comparable) o1.getValue(); Comparable<?> o2value = (Comparable) o2.getValue(); return o1value.compareTo(o2value); } }
聲明二級泛型參數類型(U),它只是推遲問題:
class AComparator3<T extends B<U>, U extends Comparable<U>> implements Comparator<T> { @Override public int compare(final T o1, final T o2) { U o1value = o1.getValue(); U o2value = o2.getValue(); return o1value.compareTo(o2value); } } ... AComparator3<A, Comparable<U>> comparator = sscce.new AComparator3();
這個比較器不是比較類A的兩個實例,而是比較它們的部分內容。
'AComparator3 比較= sscce.new AComparator3 ();'工作正常,你的第二個解決方案 – user902383
它做,但_if possible_我不想靠暴露內部類型。我不指望開發者知道他們是什麼。 – Creperum
您是否想爲'AComparator '等內部類創建比較器,或者您是否也對只需要類似'AComparator'類似類型的替代解決方案感興趣? –
Pshemo