在Java中使用不同的方法签名

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)

在这种情况下,我们不能像第一种情况那样有方法签名吗?

Dar*_*ogg 6

出于某种原因,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>:返回类型,通用ListT
  • rerurnList:方法名称
  • (List<T> list):参数列表
    • List<T>:参数类型,泛型ListT
    • list:参数名称