繁体   English   中英

返回类型的Java泛型

[英]Java generic at return type

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

public class ClassA{

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

}

基本上我不明白这一点。 该类编译没有任何错误。 我认为ClassA也应该与参数'T'一致。

谢谢

定义

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

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

作为旁注,请记住,在Java中,您可以制作通用:

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

但是你不能制作通用的:

  • 例外
  • 匿名课程
  • 枚举

Java Tutorial on Generic Methods and Generic Types以及泛型方法的详细示例和用法中有更好的解释。

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

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

您可以创建上面提到的static generic utility methods ,您don't need to create object类的don't need to create object

根据Java语言规范:

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

您可以像这样使用您的方法:

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

或者您不能指定类型参数

new ClassA().getContactName(contactList);

您可以阅读规范以获取更多详细信息以及您可以在此处找到的常见问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM