将类型显式地放入diamond操作符与让java来解决它之间有什么区别吗?

将类型显式地放入diamond操作符与让java来解决它之间有什么区别吗?,java,generics,Java,Generics,通过以下方式初始化是否有任何区别: MyWrapper<String> wrapper = new MyWrapper<String>(); MyWrapper<String> wrapper = new MyWrapper<>(); MyWrapper=newmywrapper(); vs初始化通过: MyWrapper<String> wrapper = new MyWrapper<String>(); MyWr

通过以下方式初始化是否有任何区别:

MyWrapper<String> wrapper = new MyWrapper<String>();
MyWrapper<String> wrapper = new MyWrapper<>();
MyWrapper=newmywrapper();
vs初始化通过:

MyWrapper<String> wrapper = new MyWrapper<String>();
MyWrapper<String> wrapper = new MyWrapper<>();
MyWrapper=newmywrapper();

有没有任何理由认为前者优于后者?我看到了很多前者;我不确定这是否只是因为人们已经习惯了这样做,还是因为有一个原因你想这样写。

后者只在Java 7之后才可用。这就是为什么你经常看到前者。后者是等效的,并且更短。

JDK 7允许在初始化时不重新定义这个“冗余”菱形

这只是一个简短的语法


对于JDK来说,这主要是因为尽管Java 7是当前版本,但许多代码仍然使用Java 6,而Java 6不支持后一种形式


本质上,Java 7编译器更擅长推断泛型类型。

在Java 7之前,前者是必需的。现在,后者是首选。

说清楚一点——您知道
new MyWrapper()
是一种新的表示法,在早期版本的Java中不受支持?它们生成相同的字节码当您确定代码将在java7或更高版本上运行时,请使用后者,如果不需要,请使用前者。类型推断一直存在于泛型中。“Java 7编译器更擅长推断泛型类型”菱形运算符不需要进行推断。