【发布时间】:2018-09-22 06:55:54
【问题描述】:
我正在尝试创建一个函数来处理(可比较的)元素的排序列表。因此,我使用通用的<T extends List<? extends Comparable>>,只要我不需要任何需要<? extends Comparable> 作为输入的特定于列表的操作,它就可以工作。但是在下面的代码 sn-p(最简单的例子:计算两个排序列表的交集)中,C.add((Comparable)(A.get(posA))); 行被编译器拒绝,声称add 需要参数? extends Comparable,Comparable 显然不是。
public static <T extends List<? extends Comparable>> T intersect (T A, T B) {
T C = (T) A.getClass().newInstance();
int posA = 0;
int posB = 0;
while(posA<A.size()&&posB<B.size()) {
if (A.get(posA).compareTo(B.get(posB))>0) posB++;
else if (A.get(posA).compareTo(B.get(posB))<0) posA++;
else if (A.get(posA).equals(B.get(posB))) {
C.add((Comparable)(A.get(posA)));
posA++; posB++;
}
}
return C;
}
我应该如何告诉编译器A.get(posA) 是有效类型? extends Comparable?显然强制转换不起作用,我希望例程接受并返回任意可比较对象的列表(整数、字符串、自定义对象等)
【问题讨论】:
标签: java generics inheritance