gpt4 book ai didi

java - Java 泛型类型中的 <> 和 有什么区别?

转载 作者:行者123 更新时间:2023-11-29 07:03:52 26 4
gpt4 key购买 nike

当您创建一个采用通用类型的集合字段时,您可以通过给它 ?作为值(value)或什么都没有,它们之间有什么区别:

例如

List<String> list = new ArrayList<?>();

List<String> list = new ArrayList<>();

List<String> list = new ArrayList<String>();

最佳答案

第一个陈述是错误的;您不能实例化未知类型的参数化类。您可能会将它与类似的语法混淆,其中未知位于声明的类型上,如这个虚拟示例中所示:

public static String getClassName(Class<?> clazz) {
return clazz.getName();
}

在上面的例子中,使用 表示可以提供任何类型的实例化。

最后两个语句是等价的;在 new ArrayList<>() , String类型参数是由编译器从左侧声明的类型推断出来的,而在最后一条语句中,这是明确给出的。正如其他人正确指出的那样,这种类型推断仅从 Java 7 开始可用。在 Java 7 之前,您可以通过利用在方法调用中推断类型的方式来实现类似的类型推断;例如,Guava 的 Lists.newArrayList()允许在右侧写入“Lists.newArrayList()”而无需再次指定类型,并且 JDK7 之前的编译器将从左侧正确推断类型。

关于java - Java 泛型类型中的 <> 和 <?> 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com