【发布时间】:2020-01-31 19:48:56
【问题描述】:
以下方法返回一个由T类型元素组成的List:
public <T> List<T> getList() {
return new ArrayList<T>();
}
在签名中我们有<T> List<T>。 List<T> 是有意义的,因为那是 返回值 的类型。不过前面的<T> 有什么需要呢?
如果没有<T> 和List<T>,代码将无法编译。省略<T> 给出
无法解析符号 T
我已阅读generic methods 上的 Oracle 官方教程。它解释了这是语法的一部分:
泛型方法的语法包括类型参数列表,位于尖括号内,出现在方法的返回类型之前。
但它并没有真正解释为什么首先需要它或它对方法的确切影响。
【问题讨论】:
-
<T>是一个泛型类型参数。这表明这是一个通用方法。否则没有迹象表明T应该是什么。 -
第一个
表示这是一个泛型方法。第二个 是返回类型 List 的一部分,表示该方法返回泛型类型参数的列表。请注意,第一个 不是返回类型的一部分。你也可以有一个 void sendTheList(List theList) 方法 -
@GonenI 你是对的。如果没有
,我无法编译 sendTheList。但是知道为什么编译器不能简单地从没有额外的 的返回或参数泛型类型中推断出类型吗?或者您可以指出我的任何进一步阅读? -
@Zabuza 关于“您本可以发布该链接,然后解释它为什么没有回答您的问题” - 感谢您的解释。你是对的,我以后会记住这一点。我已经删除了我对编辑的评论,因为最新的编辑使帖子更加清晰。
标签: java generics generic-method