与that相关问题。
我知道通配符捕获。例如,以下可用于反转列表:
public static void reverse(List<?> list) { rev(list); } //capturing the wildcard
private static <T> void rev(List<T> list) {
List<T> tmp = new ArrayList<T>(list);
for (int i = 0; i < list.size(); i++) {
list.set(i, tmp.get(list.size()-i-1));
}
}
现在我正在尝试为这种情况写同样的东西:
private int compare (Comparable<?> upper, Comparable<?> lower){
return comp(upper, lower); //The method comp(Comparable<T>, Comparable<T>) is not applicable for the arguments (Comparable<capture#5-of ?>, Comparable<capture#6-of ?>)
}
private <T> int comp(Comparable<T> upper, Comparable<T> lower){
return upper.compareTo((T) lower);
}
我希望它也编译得很好。是否可以通过这种方式捕获具有两个或更多参数的方法的通配符?
最佳答案
因为,正如我在回答您的另一个问题时所说,编译器无法知道这两个 ?
代表同一类型。
两个 ?
分别代表某种未知类型。 compare
方法需要两个相同类型 T
的 Comparable
对象。如果从 comp
方法中调用 compare
,编译器无法确定这两个 ?
代表相同的类型。
关于java - 为什么我们不能捕获具有两个参数的方法的通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30703374/