类型推断:Java 7类型参数

aga*_*ner 0 java generics type-inference variable-declaration java-7

今天我们谈到了Java 7在我们公司的优势.从Java 7开始,可以定义以下行

Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Run Code Online (Sandbox Code Playgroud)

Map<String, List<String>> myMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

我们对上述主题进行了长时间的讨论.我们中的一些人认为这是类型推断(如varC#中的关键字),并且类型将在运行时计算,其他人认为它只是一种更简单的方式来声明某个变量并且没有推断,因为类型是已知的编译时的上下文.

请提供澄清.技术如何运作?

编辑:官方Oracle文档没有提供有关该文档的精确文档.http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

Kon*_*kov 7

实际上,它类型推断.

菱形运算符(<>)允许将赋值的右侧定义为具有与左侧相同类型参数的真正通用实例,而无需再次键入这些参数(因为编译器推断出类型的类型)左手边).

来自Angelika Langer的Generics FAQ:

它(菱形运算符)表示在新表达式中用于类型推断的空尖括号.

更多信息:

  • 绝对.请记住,在编译期间会删除参数化类型(也称为泛型).因此,它遵循它们不是运行时类型检查.编译器会检查它们,但是在编译时(之后它们会被擦除). (2认同)