有人可以通过两种不同的方式告诉我调用相同函数的区别,以及两种情况下编译器的作用是什么;像:
Collections.emptyList()
Collections.<Integer>emptyList()
答案 0 :(得分:2)
第二个选项是提供所谓的类型见证。
换句话说:你,程序员给编译器一个提示来理解需要在这里使用的泛型返回类型。
此功能在Java8之前更为重要;仅仅因为类型推断在早期并不“足够好”。因此,Java语法允许以这种方式指定泛型类型。
使用Java8,类型推断得到了显着改善;因此,今天需要提供类型提示的方式要小一些。
换句话说:大多数情况下,编译器可以检测 emptyList()
应该返回List<Integer>
。在编译器无法执行此操作的情况下; <Integer>emptyList()
告诉它预期的内容。
编译输出在两种情况下应该相同。要记住的是:除非必须,否则不要使用类型证人。
换句话说:您在不使用类型见证功能的情况下编写代码。只有当编译器为您提供只能使用类型见证解决的错误时,才能使用它。