返回类型的Java泛型

时间:2014-07-31 09:12:15

标签: java generics

我见过这样的代码并且无法理解它的意义:

public class ClassA{

public <T> void getContactName(ContactList<T> contactList){
    //do something
}    

}

基本上我没理解这一点。该类编译没有任何错误。我认为ClassA也应该通过参数&#39; T&#39; 。

由于

3 个答案:

答案 0 :(得分:6)

定义

public <T> void getContactName(ContactList<T> contactList){
    //do something
}    

表示只有方法是通用的,名称为T的类型仅在方法范围内有效。如果T类型参数仅在单个方法中使用,则不需要该类是通用的。

作为旁注,请记住,在Java中,您可以使用泛型:

  • 课程(匿名者除外)
  • 方法
  • 接口

但是你不能通用:

  • 例外
  • 匿名课程
  • 枚举

答案 1 :(得分:2)

最好在Generic MethodsGeneric Types上的 Java Tutorial 以及 detail 示例和泛型方法的使用下进行解释。

这是一个示例(内置Arrays类)。查看方法签名,确保方法返回类型与方法参数完全相同,因为类本身不是通用的,但您可以将方法设置为泛型。

class Arrays {
    public static <T> List<T> asList(T... a) {
    ...
}

如上所述,您可以在课程static generic utility methods中创建don't need to create object

答案 2 :(得分:1)

根据Java语言规范:

  • 类型变量是非限定标识符。类型变量是 由泛型类声明,泛型接口引入 声明,泛型方法声明和泛型构造函数 声明。
  • 如果一个类声明了一个或多个类型变量,则它是通用的。这些 类型变量称为类的类型参数。它 定义一个或多个充当参数的类型变量。通用的 class声明定义了一组参数化类型,每个类型一个 可能调用类型参数部分。所有这些 参数化类型在运行时共享同一个类。
  • 如果接口声明了一个或多个类型变量,则接口是通用的。 这些类型变量称为类型参数 接口。它定义了一个或多个充当的类型变量 参数。通用接口声明定义了一组类型, 每个可能的类型参数部分调用一个。所有 参数化类型在运行时共享相同的接口。
  • 如果方法声明一个或多个类型变量,则该方法是通用的。这些 类型变量称为方法的形式类型参数。 形式类型参数列表的形式与类型相同 类或接口的参数列表。
  • 构造函数可以声明为泛型,与是否无关 声明构造函数的类本身是通用的。一个 如果构造函数声明一个或多个类型变量,则它是通用的。 这些类型变量称为形式类型参数 构造函数。形式类型参数列表的形式是相同的 到通用类或接口的类型参数列表。

您可以使用以下方法:

new ClassA().<String>getContactName(contactList);

或者您无法指定类型参数

new ClassA().getContactName(contactList);

您可以阅读规范以获取更多详细信息以及您可以找到的here