4

我很困惑,如果以下方法相同?有什么细微的差别吗?

非常感谢您的建议。

方法一

public static double sumOfList(List<?> list) {}

方法二

public static <T> double sumOfList(List<T> list) {}
4

3 回答 3

9

T 在第二种情况下可以使用的方法里面。

在第一种情况下你不能。

考虑这个例子

private static <T> void printList(List<T> list) {
for (T t: list) {
    System.out.println(t);
}

}

于 2013-09-13T13:21:26.983 回答
2

在这种情况下,没有区别。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[]);

你不能用通配符来做。

于 2013-09-13T20:40:09.630 回答
0

在第二种方法中,您可以这样使用:

T t;

但是,您不能使用第一种方法。我认为这就是区别。我希望它会帮助你。

于 2013-09-13T13:32:31.583 回答