返回类型为Java泛型
我见过一些这样的代码,但无法理解其意义:返回类型为Java泛型,java,generics,Java,Generics,我见过一些这样的代码,但无法理解其意义: public class ClassA{ public <T> void getContactName(ContactList<T> contactList){ //do something } } 公共类ClassA{ public void getContactName(联系人列表ContactList){ //做点什么 } } 基本上我不明白这一点。该类编译时没有任何错误。我认为ClassA也
public class ClassA{
public <T> void getContactName(ContactList<T> contactList){
//do something
}
}
公共类ClassA{
public void getContactName(联系人列表ContactList){
//做点什么
}
}
基本上我不明白这一点。该类编译时没有任何错误。我认为ClassA也应该使用参数“T”进行泛型
谢谢你的定义
public <T> void getContactName(ContactList<T> contactList){
//do something
}
public void getContactName(联系人列表ContactList){
//做点什么
}
这意味着只有方法是泛型的,而名为T
的类型仅在方法的范围内有效。如果T
type参数仅在单个方法中使用,则类不需要是泛型的
作为旁注,请记住,在Java中,您可以使其成为泛型:
- 类(匿名类除外)
- 方法
- 接口
- 例外情况
- 匿名类
- 列举
数组类)。请看一看方法签名,它确保方法返回类型与方法参数完全相同,因为类本身不是泛型的,但您可以将方法设置为泛型的
class Arrays {
public static <T> List<T> asList(T... a) {
...
}
类数组{
公共静态列表asList(T…a){
...
}
您可以如上所述创建静态通用实用程序方法
,其中不需要创建类的对象。根据Java语言规范:
- 类型变量是非限定标识符。类型变量是
由泛型类声明、泛型接口引入
声明、泛型方法声明和泛型构造函数
声明
- 如果类声明了一个或多个类型变量,则该类是泛型的
类型变量称为类的类型参数
定义一个或多个用作参数的类型变量。泛型
类声明定义了一组参数化类型,每个类型一个
可能调用类型参数部分。所有这些
参数化类型在运行时共享同一个类
- 如果接口声明了一个或多个类型变量,则该接口是泛型的。
这些类型变量称为
接口。它定义一个或多个作为
泛型接口声明定义了一组类型,
一个用于类型参数节的每个可能调用。全部
参数化类型在运行时共享同一接口
- 如果方法声明了一个或多个类型变量,则该方法是泛型的
类型变量称为方法的形式类型参数。
形式类型参数列表的形式与类型相同
类或接口的参数列表
- 构造函数可以声明为泛型,与
在其中声明构造函数的类本身是泛型的
如果构造函数声明一个或多个类型变量,则它是泛型的。
这些类型变量称为
构造函数。形式类型参数列表的形式相同
指向泛型类或接口的类型参数列表
您可以这样使用您的方法:
new ClassA().<String>getContactName(contactList);
您可以阅读规范以了解更多详细信息和常见问题解答,您可以找到嗯,返回类型为void。泛型参数只是确保两个方法参数使用相同的泛型类型。抱歉,让我更改方法。添加方法签名是否不够?为什么我们需要在void之前添加?因为我们必须告诉Ja我们将使用一个名为T
的类型,因为我们没有在类级别定义它,所以我们在方法级别定义它。void
之前的
只是声明泛型类型参数。它告诉编译器,T
是泛型类型-在您的情况下没有任何限制。void
之前的
不是泛型类型返回类型的一部分。它位于方法修饰符和返回类型之间。我同意语法有点复杂,public void getContactName(ContactList ContactList)
更合理,但Sun就是这样决定的。
new ClassA().getContactName(contactList);