如何创建引用嵌套泛型类型的泛型类?
我正在尝试创建一个比较器类,可以比较B的内部类型,而不需要公开这些类型.在下面的例子中,我得到一个编译器警告,用于将我的T内嵌值传递给Comparable:
public class SSCCE {
// Compare my A instances.
class AComparator implements Comparator {
@Override
public int compare(final T o1,final T o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
class A extends B {
@Override Integer getValue() { return 1; }
}
class A2 extends B {
@Override String getValue() { return "Test String!"; }
}
abstract class B> {
abstract T getValue();
}
public static void main(String[] args) {
SSCCE sscce = new SSCCE();
AComparator comparator = sscce.new AComparator<>();
comparator.compare(sscce.new A(),sscce.new A());
}
}
是否可以表示使用内部值来安全地允许投射?
我试过的事情
>创建可比较的通配符(不可编译):
class AComparator2>> implements Comparator {
@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,U extends Comparable> implements Comparator {
@Override
public int compare(final T o1,final T o2) {
U o1value = o1.getValue();
U o2value = o2.getValue();
return o1value.compareTo(o2value);
}
}
...
AComparator3> comparator = sscce.new AComparator3();
该比较器不是比较类A的两个实例,而是它们的内容的一部分.