【问题标题】:Generic method - syntax confusion泛型方法 - 语法混乱
【发布时间】:2013-08-13 03:08:03
【问题描述】:

我正在阅读有关泛型方法的信息。我研究过,如果你没有在类级别声明类型并使用泛型方法,语法会是这样的

public <T> void makeArrayList(T t)

在这里我可以总结以下几点,如果我没有在返回类型之前声明占位符,它会给我编译时错误。我很困惑。我正在研究其他主题Java Generics: Generic type defined as return type only,但这似乎很令人困惑。我的问题是

  1. 编译器如何知道,集合的类型是什么?
  2. 为什么我们需要在返回类型之前声明类型?

有人可以详细说明这一点吗?

【问题讨论】:

    标签: java generics


    【解决方案1】:

    如果你不把&lt;T&gt;放在头部,函数就无法知道T的存在。

    Oracle 文档中对类型推断的简短解释:

    编译器根据类型为我们推断类型参数 实际的论点。它通常会推断出最具体的类型 将使调用类型正确的参数。

    参考资料:
    我强烈推荐阅读Java Generics FAQ,尤其是Java Generic Methods 部分。 Oracle tutorial on Generic Methods 也很有用,尽管没有其他参考文献那么广泛。

    【讨论】:

    • 我期待内部机制,编译器如何解释,类型是什么,我知道它非常基本的泛型问题,但通常很困惑。
    • 感谢您的编辑。我明白你的意思了,你说的推断类​​型是什么意思?
    • @benz 不必将实际类型参数传递给泛型方法,而是编译器根据实际参数的类型推断类型参数。我知道这听起来不像我在那里解释了什么,但在阅读参考资料后,这应该会变得清晰。
    • 谢谢@Steve。非常感谢,如果发现有困难,我会查看参考资料并回复您。
    • @benz 没问题。文档很长,但非常有帮助。不要让长度压倒你。
    【解决方案2】:

    1。编译器如何知道,集合的类型是什么?

    类型是你在每次方法调用时传入的任何类型。方法声明中没有具体类型;这就是声明泛型方法的含义。

    2。为什么需要在return-type之前声明类型?

    因为that's the language's syntax for declaring a generic method.the JLS § 8.4.4.

    【讨论】:

      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2020-04-20
      相关资源
      最近更新 更多