我正在阅读有关通用方法的内容。我已经研究过,如果你没有在类级别声明类型并使用泛型方法,那么语法就会像这样
public <T> void makeArrayList(T t)
这里我可以总结以下几点,如果我没有在返回类型之前声明占位符,它会给我编译时错误。我很困惑。我正在研究其他主题Java Generics: Generic type defined as return type only但似乎很混乱。我的问题是
有人可以详细说明这一点吗?
答案 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.