如何将Java7类型推断用于泛型实例创建功能?使用这种新样式有什么好处?
只是打字少了。
从文档中:
例如,考虑下面的变量声明:
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
在JavaSE 7中,您可以将构造函数的参数化类型替换为类型参数的空集合(
Map<String, List<String>> myMap = new HashMap<>();
不幸的是,你仍然必须键入钻石。
没有。菱形语法只是编码/打字的简写。这两个是一样的
List<String> a = new ArrayList<String>();
List<String> a = new ArrayList<>();
在编译过程中,它们被视为相同的对象,即编译器提示。即使在类型擦除之前,它们也会得到相同的处理。这对你来说只是一种方便。
这也称为菱形操作符。它使您不必在泛型类型的实例化上编写泛型类型参数。实例化泛型类型的类型参数是从声明中存在的类型参数推断出来的。
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 是泛型类型,是的类,并且是初始大小。 这里的文件