Tin*_*iny 0 java methods generic-list
以下两种方法可以很好地编译并完成它们的功能.
public int returnArray()[]
{
int a[]={1 ,2};
return a;
}
public String[] returnArray(String[] array[])[]
{
return array;
}
Run Code Online (Sandbox Code Playgroud)
根据这个方法签名,我们不能以某种方式有如下方法签名吗?
public <T>List rerurnList(List<T> list)<T>
{
return new ArrayList<T>();
}
Run Code Online (Sandbox Code Playgroud)
此方法旨在返回java.util.List泛型类型.它不编译.必须按如下方式对其进行修改才能成功编译.
public <T>List<T> rerurnList(List<T> list)
{
return new ArrayList<T>();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们不能像第一种情况那样有方法签名吗?
出于某种原因,Java允许您像在C中一样定义数组,在变量或方法名称后面添加[]修饰符.然而,这对于泛型来说是不可能的.
必须使用类型声明泛型类型参数,因为它们是类型描述符的一部分.数组也应该以这种方式声明,因为它们也是类型描述符的一部分.
为了理解为什么编译器不允许你以这种方式写东西(以及为什么它不应该让你像第一个例子那样写东西),我们需要将它分解成碎片.
public int returnArray()[] { ... }
Run Code Online (Sandbox Code Playgroud)
public:可见性声明int:返回类型,整数returnArray:方法名称():参数列表(空)[]:哎呀!返回类型实际上是我们之前说过的数组这甚至更好:
public String[] returnArray(String[] array[])[]
Run Code Online (Sandbox Code Playgroud)
public:可见性声明String[]:返回类型,一个字符串数组returnArray:方法名称(String[] array[]):参数列表......
String[]:参数的类型,字符串数组array:参数的名称[]:哎呀!参数类型实际上是我们之前所说的数组[]:再次哎呀!返回类型实际上是我们之前说过的数组注意:不要这样做,只在类型中指定类型.而不是String[] array[],使用String[][] array.
既然数组的东西语法是清楚的,我希望你理解为什么它应该是错的,让我们从generig的事情开始:
public <T> List<T> rerurnList(List<T> list) { ... }
Run Code Online (Sandbox Code Playgroud)
public:可见性声明<T>:此方法使用泛型类型 T List<T>:返回类型,通用List的TrerurnList:方法名称(List<T> list):参数列表
List<T>:参数类型,泛型List的Tlist:参数名称