Java 8类型推断静态方法调用

时间:2015-06-27 10:06:14

标签: java generics type-inference

从Java 7开始,允许使用菱形运算符以避免重复类型参数。例如

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

变为

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

为什么使用静态方法调用时不允许使用相同的表示法?例如,在创建SettableFuture时,我想调用

SettableFuture<String> myFuture = SettableFuture.<>create();

而不是

SettableFuture<String> myFuture = SettableFuture.<String>create();

我知道可以使用原始方法调用

SettableFuture<String> myFuture = SettableFuture.create();

但这与

不同
List<String> myList = new ArrayList();

我的问题:我应该在调用泛型静态方法时使用raw方法调用还是重复type参数?

1 个答案:

答案 0 :(得分:0)

通过构造函数创建Java对象。因为这是正常行为,所以Java开发人员将空diamon创建为糖语法功能。

对象实例化的静态方法不应该像构造函数那样频繁发生。它们用于许多其他东西。因此,语法不会计划检测您尝试做的是创建需要泛型类型的对象。

修改

我错了。静态方法中的类型也有语法糖(省略了diamon),create()比我想象的更常见。

我的回答:我宁愿省略diamon,因为变量中已经指定了类型,这样可以避免代码中的信息冗余。