java通用的调用方法与普通调用的方式

时间:2017-06-19 11:57:55

标签: java generics

有人可以通过两种不同的方式告诉我调用相同函数的区别,以及两种情况下编译器的作用是什么;像:

  1. Collections.emptyList()
  2. Collections.<Integer>emptyList()

1 个答案:

答案 0 :(得分:2)

第二个选项是提供所谓的类型见证

换句话说:你,程序员给编译器一个提示来理解需要在这里使用的泛型返回类型。

此功能在Java8之前更为重要;仅仅因为类型推断在早期并不“足够好”。因此,Java语法允许以这种方式指定泛型类型。

使用Java8,类型推断得到了显着改善;因此,今天需要提供类型提示的方式要小一些。

换句话说:大多数情况下,编译器可以检测 emptyList()应该返回List<Integer>。在编译器无法执行此操作的情况下; <Integer>emptyList()告诉它预期的内容。

编译输出在两种情况下应该相同。要记住的是:除非必须,否则不要使用类型证人。

换句话说:您在不使用类型见证功能的情况下编写代码。只有当编译器为您提供只能使用类型见证解决的错误时,才能使用它。

有关详细信息,请参阅herethere