3

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

public <T> void makeArrayList(T t)

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

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

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

4

2 回答 2

6

如果您不将 放在<T>标题中,则该函数无法知道它的T存在。

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

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

参考资料:
我强烈推荐阅读Java 泛型常见问题解答,特别是Java 泛型方法部分。Oracle 通用方法教程也很有用,尽管没有其他参考资料那么广泛。

于 2013-08-11T20:18:32.660 回答
3

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

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

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

因为这是声明泛型方法的语言语法。参见JLS § 8.4.4。

于 2013-08-11T20:19:44.410 回答