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

java通用调用方法与普通调用,java,generics,Java,Generics,有没有人能告诉我用两种不同的方法调用同一个函数的区别,以及编译器在这两种情况下到底做了什么;比如: Collections.emptyList() Collections.emptyList() 第二个选项是提供所谓的类型见证 换句话说:程序员给编译器一个提示,让编译器理解这里需要使用的泛型返回类型 这个特性在Java8之前更为重要;仅仅是因为类型推断在早期不够好。因此,Java语法允许以这种方式指定泛型类型 使用Java8,类型推断得到了极大的改进;因此,现在对类型提示的需求要小得多 换句话说

有没有人能告诉我用两种不同的方法调用同一个函数的区别,以及编译器在这两种情况下到底做了什么;比如:

  • Collections.emptyList()
  • Collections.emptyList()

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

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

    这个特性在Java8之前更为重要;仅仅是因为类型推断在早期不够好。因此,Java语法允许以这种方式指定泛型类型

    使用Java8,类型推断得到了极大的改进;因此,现在对类型提示的需求要小得多

    换句话说:大多数情况下,编译器可以检测
    emptyList()
    是否应该返回一个
    列表。在编译器无法执行此操作的情况下<代码>清空列表()
    告诉它所期望的内容

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

    换句话说:您编写代码时没有使用类型见证功能。只有当编译器给出一个只能通过使用类型见证来解决的错误时,您才能使用它


    进一步阅读,请参阅或。

    您的意思是
    集合.EMPTY_LIST
    集合.emptyList()如果是,请参考@JoeClay,我已更新问题。@SteveSmith内容已更新。很抱歉给您添麻烦。两种情况下编译的结果都是相同的。它只是对编译和IDE进行类型检查。在编译时,将删除泛型内容。因此,它阻止了每次你想从收藏中得到什么的时候都去投。勇敢的投票者有什么解释吗?我想我的答案是正确的。@tomaaaaa。这就是为什么我找不到它的链接。谢谢是的,你会发现更多关于“类型见证”:D。顺便说一句,我已经删除了旧评论,因为它现在已经过时了(我喜欢清理)。@GhostCat谢谢你提供的信息。如果我们不提供类型信息,那么如何将一种类型的引用转换为指向另一种类型的对象,您能告诉我会发生什么吗。@user157920不客气。我再次更新了我的答案;希望有帮助。