我很困惑,如果以下方法相同?有什么细微的差别吗?
非常感谢您的建议。
方法一
public static double sumOfList(List<?> list) {}
方法二
public static <T> double sumOfList(List<T> list) {}
T
在第二种情况下可以使用的方法里面。
在第一种情况下你不能。
考虑这个例子
private static <T> void printList(List<T> list) {
for (T t: list) {
System.out.println(t);
}
}
在这种情况下,没有区别。T
仅在参数中的一处使用,因此它不强制在两处类型之间建立关系。
在其他情况下,例如 ifT
在返回类型中:
public <T> List<T> newList();
或者如果T
在多个地方使用:
public <T> T foo(T x);
public <T> void bar(List<T> list, T x);
或者如果T
是递归有界的:
public <T extends Comparable<? super T>> void sort(T[]);
你不能用通配符来做。
在第二种方法中,您可以这样使用:
T t;
但是,您不能使用第一种方法。我认为这就是区别。我希望它会帮助你。