当前位置: 首页 > 知识库问答 >
问题:

Java未绑定通配符vs[重复]

岳飞航
2023-03-14

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

非常感谢你的建议。

方法1

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

方法二

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

共有3个答案

诸超
2023-03-14

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

T t;

然而,在第一种方法中你不能。我认为这就是区别。我希望它能帮助你。

卫博雅
2023-03-14

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

你不能用通配符。

邵璞
2023-03-14

在方法内部,您可以在第二种情况下使用T

在第一种情况下你不能。

考虑这个例子

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

}

 类似资料:
  • 问题内容: 该问题的答案表明,当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 这是什么意思?“ 当方法采用通配符通用类型时,可以访问或修改集合,但不能同时访问两者 ”? 据我所知,方法do1具有d2只能访问但不能修改。d2的方法使c2可以被访问和修改,并且没有编译错误。 通用准则 问题答案: 该问题的答案表明,当方法采用通配符通用类型时,可以访问或修改集合

  • 问题内容: 与完全跳过它们相比,在类中使用通配符类型的泛型有什么优势吗? 问题答案: 有很多优点。 他们不会像使用原始类型那样产生编译器警告 它们提供了更多的类型安全性。例如,考虑是否是。如果您使用代替,则可以执行以下操作: 即使该列表仅 应 包含s。如果返回,则您将无法添加 任何 内容(除外),因为列表类型未知。 他们记录的东西与原始类型完全不同,即使用某种 未知但特定的类型进行输入 。

  • 这个问题的答案表明,当方法采用通配符泛型类型时,可以访问或修改集合,但不能同时访问或修改集合。(凯西和伯特) 据我所知,方法do1有,因此d2只能被访问,不能被修改。方法d2具有,因此可以访问和修改c2,并且没有编译错误。 通用指南

  • 这2个功能有什么区别? 我看到了相同的输出。

  • 我是java新手,我在网上读了很多关于还是,但我还是不明白。下面是我的例子: 为什么会有错误?我的问题和评论中提到的不同

  • 方法在类型不适用于参数