地图类型声明差异

时间:2015-12-27 16:07:06

标签: java types declaration variable-declaration

之间的区别是什么
Map<String, String> exemple = new HashMap<>();

Map<String, String> exemple = new HashMap<String, String>();

2 个答案:

答案 0 :(得分:3)

从技术上讲,它们都不是有效的Java。他们应该是

Map<String, String> example = new HashMap<>();

Map<String, String> example = new HashMap<String, String>();

在Java 7和8中两者之间没有真正的区别。但是,第一个示例在Java7之前的Java版本中无效,Java7在Java编译器中引入了有限数量的类型推断并且明确地进行了在某些地方声明不需要的类型参数。

https://docs.oracle.com/javase/8/docs/technotes/guides/language/type-inference-generic-instance-creation.html

大多数IDE都会强调该声明的第二种形式,因为这些日子涉及不必要的重复。但是,它不是一个错误,它们都声明完全相同的事情。

答案 1 :(得分:0)

关于你的第一个陈述(如果你在最后有圆括号):

  • 由编译器启动java 7,键和值类型为inferred,因此您无需在右侧指定参数类型。
  • 此代码可以在JDK7和8上很好地编译。

关于你的第二个陈述(如果你在最后有圆括号):

  • 在Java6之前,您必须在构造HashMap的右侧明确指定键和值的类型。
  • 此代码可以在JDK5及更高版本上很好地编译。