通用方法 - 语法混淆

时间:2013-08-11 20:16:34

标签: java generics

我正在阅读有关通用方法的内容。我已经研究过,如果你没有在类级别声明类型并使用泛型方法,那么语法就会像这样

public <T> void makeArrayList(T t)

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

  1. 编译器如何知道,集合的类型是什么?
  2. 为什么我们需要在返回类型之前声明类型?
  3. 有人可以详细说明这一点吗?

2 个答案:

答案 0 :(得分:5)

如果您未将<T>放在标题中,则该函数无法知道T是否存在。

Oracle文档中给出的类型推断的简短说明:

  

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

<强>参考文献:
我强烈建议您阅读Java Generics FAQ,特别是Java Generic Methods部分。 Oracle tutorial on Generic Methods也很有用,虽然不像其他参考文献那么广泛。

答案 1 :(得分:3)

  

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

类型是您在每次方法调用时传递的任何类型。方法声明中没有具体的类型;这就是声明泛型方法的意思。

  

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

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