括号内与括号外的 Java 泛型方法参数类型

标签 java generics

两者有什么区别:

static void findMax(LinkedList<? extends Number> list){...}

和:

static <T extends Number> void findMax(LinkedList<T> list){...}

由于两者都有效,我想知道两者之间是否有任何大的区别,建议使用哪个。

最佳答案

主要区别在于,在第二个版本中您可以访问类型 T 而在第一个版本中您不能。

例如,您可能希望返回与 T 相关联的内容(例如,返回 T 而不是 void):

static <T extends Number> T findMax(LinkedList<T> list){...}

或者您可能需要创建一个新的 T 列表:

static <T extends Number> void findMax(LinkedList<T> list){
    List<T> copyAsArrayList = new ArrayList<> (list);
    //do something with the copy
}

如果您不需要访问 T,这两个版本在功能上是等效的。

关于括号内与括号外的 Java 泛型方法参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17448884/

相关文章:

Java 7 泛型类型推断失败

java - Mockito 接口(interface)方法冲突

java - Log4j 如何阻止记录器打印到控制台?

java - 通用类型 Java 中的接口(interface)

java - 如何为默认的 Spring Boot 2 指标定义附加或自定义标签?

java - 即使在日志中看到 "adding transactional method",事务顾问也不会拦截方法

java - 在 Java 中,类型后跟尖括号(如 List<Foo>)是什么意思?

java - 为什么 Java 不允许注入(inject)嵌套泛型?

java - 我想解析Gson信息但出现错误

java - 如何使用 XSD 和 JSON 或元素/值的 HashMap 作为输入,在 Java 中创建 XML