如果以下方法相同,我会感到困惑吗?有什么微妙的差异吗?
非常感谢您的建议。
方法1
public static double sumOfList(List<?> list) {}
方法2
public static <T> double sumOfList(List<T> list) {}
答案 0 :(得分:8)
在方法中,您可以在第二种情况下使用T
。
你不能在第一种情况下。
考虑这个例子
private static <T> void printList(List<T> list) {
for (T t: list) {
System.out.println(t);
}
}
答案 1 :(得分:1)
在这种情况下,没有区别。 T
仅在参数的一个位置使用,因此它不会强制两个地方的类型之间的关系。
在其他情况下,例如如果T
在返回类型中:
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[]);
你不能用通配符来做。
答案 2 :(得分:0)
在第二种方法中你可以这样使用:
T t;
然而你不能在第一种方法中。 我认为这是不同的。 我希望它会对你有所帮助。