我确实无法理解以下声明,而它确实是可编辑的:
List<Integer> l = Collections.<Integer>singletonList(5);
说,第二个<Integer>
,我们如何在方法名称前加一个<Integer>
?我怀疑这是一个泛型的声明,但无法在任何地方找到它。但我只知道List<Integer>
这样的定义,将<Integer>
置于泛型类型后面。任何人都可以指出我这个语法的教程或找到重复的问题(对不起,我在快速搜索期间没找到一个)?
非常感谢!
答案 0 :(得分:3)
这称为类型见证,并在Type Inference trail中引用:
泛型方法
addBox
定义了一个名为U的类型参数。通常,Java编译器可以推断泛型方法调用的类型参数。因此,在大多数情况下,您不必指定它们。例如,要调用泛型方法addBox
,您可以使用 type witness 指定type参数,如下所示:BoxDemo.<Integer>addBox(Integer.valueOf(10), listOfIntegerBoxes);
实际上,类型见证允许开发人员介入以解决类型引擎无法正确推断值将导致什么类型的情况。您在Java中更常见和普遍地看到它的用法7,而Java 8改进了其类型推断功能。