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

用于泛型实例创建的Java7类型推断?

姬欣怡
2023-03-14

如何将Java7类型推断用于泛型实例创建功能?使用这种新样式有什么好处?

共有3个答案

尤博达
2023-03-14

只是打字少了。

从文档中:

例如,考虑下面的变量声明:

Map<String, List<String>> myMap = new HashMap<String, List<String>>();

在JavaSE 7中,您可以将构造函数的参数化类型替换为类型参数的空集合(

Map<String, List<String>> myMap = new HashMap<>();

不幸的是,你仍然必须键入钻石。

赵俊远
2023-03-14

没有。菱形语法只是编码/打字的简写。这两个是一样的

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

在编译过程中,它们被视为相同的对象,即编译器提示。即使在类型擦除之前,它们也会得到相同的处理。这对你来说只是一种方便。

李昌勋
2023-03-14

这也称为菱形操作符。它使您不必在泛型类型的实例化上编写泛型类型参数。实例化泛型类型的类型参数是从声明中存在的类型参数推断出来的。

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

而不是:

ArrayList<String> list = new ArrayList<String>();
 类似资料:
  • 问题内容: 是否可以在Java中创建泛型类型的实例?我正在根据我所看到的答案进行思考no(由于类型擦除),但是如果有人能看到我所缺少的内容,我将很感兴趣: 编辑:事实证明,超级类型令牌可以用于解决我的问题,但是它需要很多基于反射的代码,如下面的一些答案所示。 问题答案: 你是对的。你做不到。但你可以将其更改为 但这有效。以工厂模式包装它会使它更具容忍性。

  • 问题内容: 我的问题是这样的: 为什么不能使用类Class的new T()和newInstance()实例化泛型? 问题答案: 您需要使用反射(),因为在编译时需要链接其构造函数的类是未知的。因此,编译器无法生成链接。

  • 问题内容: 我有一个普通班和一个具体班。如何创建类型数组? 我试过: 但是我得到了ClassCastException。 但是,当我尝试时: 效果很好。 问题答案: 使用原始类型创建数组:

  • 我试图解析spring Version4.3.6中FactoryBean中的泛型类型。我使用FactoryBean创建bean,该bean用于创建任意数量的CarClient实例。 通过构造函数参数1表示的不满足依赖关系;嵌套异常是org.springframework.beans.factory.nouniqueBeanDefinitionException:没有类型为“com.empire.c

  • 问题内容: 如何创建泛型类型的数组?通用方法如何工作?它返回通用数组的副本。因此可以创建通用数组。但是如何?怎么能写一个类似的方法呢? 问题答案: 如果需要在运行时创建它,则至少需要在此时知道类型,因此可以使用以下方法: where 是泛型类型,是的类,并且是初始大小。 这里的文件