在java泛型中键入Witness

Abh*_*der 6 java generics

我从Geonicics Trail In Java Documentation中看到了什么Type Witness

BoxDemo.<Integer>addBox(Integer.valueOf(10), listOfIntegerBoxes);
Run Code Online (Sandbox Code Playgroud)

或者,如果省略类型见证,Java编译器会自动推断(从方法的参数)类型参数是Integer:

BoxDemo.addBox(Integer.valueOf(20), listOfIntegerBoxes);
Run Code Online (Sandbox Code Playgroud)

想了解

  • 这样做的正确方法是什么?使用Type Witness还是让Java推断?
  • 是否存在绝对需要使用类型见证的情况?
  • 这是Java 5的一个功能还是以后添加的?

See*_*ose 10

一些快速回答您的问题:

这样做的正确方法是什么?使用Type Witness还是让Java推断?

由于这两种方法都是有效的,因此没有技术上正确的答案.但代码可读性应始终是质量标准.所以后者更好.此外,您可能会在开发的稍后时间更改参数的类型.有了类型推断你必须改变该行.


是否存在绝对需要使用类型见证的情况?

是.当无法从方法的输入参数推断出类型时,需要它.也许泛型类型仅用于返回值,独立于参数的类型.然后你只需要指定它.


这是Java 5的一个功能还是以后添加的?

泛型是Java 5的语言特性.类型推断是在JLS中指定的编译器功能.在Java 8 JLS中,这个主题有了自己的章节.每个Java版本都对该功能进行了一些增强.例如,Java 7引入了钻石运算符.据我所知,Java 5中已经引入了类型见证方法.