gpt4 book ai didi

java - 为什么我们不能捕获具有两个参数的方法的通配符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:58 25 4
gpt4 key购买 nike

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 方法需要两个相同类型 TComparable 对象。如果从 comp 方法中调用 compare,编译器无法确定这两个 ? 代表相同的类型。

关于java - 为什么我们不能捕获具有两个参数的方法的通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30703374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com