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

时间:2013-11-23 14:29:48

标签: java methods generic-list

以下两种方法可以很好地编制并完成它们的作用。

public int returnArray()[]
{
    int a[]={1 ,2};
    return a;
}

public String[] returnArray(String[] array[])[]
{
    return array;
}

根据这种方法签名,我们不能以某种方式拥有如下的方法签名吗?

public <T>List rerurnList(List<T> list)<T>
{
    return new ArrayList<T>();
}

此方法旨在返回java.util.List泛型类型。 无法编译。为了成功编译,必须按如下方式进行修改。

public <T>List<T> rerurnList(List<T> list)
{
    return new ArrayList<T>();
}

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

2 个答案:

答案 0 :(得分:6)

由于某些原因,Java允许您像在C中一样定义数组,在变量或方法名称之后添加[]修饰符。然而,这对于泛型来说是不可能的。

通用类型参数与类型一起声明,因为它们是类型描述符的一部分。数组也应该这样声明,因为它们也是类型描述符的一部分

为了理解为什么编译器不允许你以这种方式写东西(为什么不应该让你像第一个例子那样写东西),我们需要把它分解为件。


public int returnArray()[] { ... }
  • public:可见性声明
  • int:返回类型,整数
  • returnArray:方法名称
  • ():参数列表(空)
  • []:哎呀!返回类型实际上是我们之前所说的数组

这更好:

public String[] returnArray(String[] array[])[]
  • public:可见性声明
  • String[]:返回类型,字符串数组
  • returnArray:方法名称
  • (String[] array[]):参数列表......
    • String[]:参数的类型,字符串数组
    • array:参数名称
    • []:哎呀!参数类型实际上是我们之前所说的数组
  • []:再次呐喊!返回类型实际上是我们之前所说的数组

脚注:不要这样做,只在类型中指定类型。而不是String[] array[],请使用String[][] array


现在数组的东西语法很清楚了,我希望你理解为什么应该错误,让我们从generig开始:

public <T> List<T> rerurnList(List<T> list) { ... }
  • public:可见性声明
  • <T>:此方法使用泛型T
  • List<T>:返回类型,List
  • 的通用T
  • rerurnList:方法名称
  • (List<T> list):参数列表
    • List<T>List
    • 的参数类型,通用T
    • list:参数名称

答案 1 :(得分:3)

回答你的问题:你正在为编译失败的方法尝试的语法肯定是错误的,因为参数列表和方法体之间放置了<T>

(List<T> list)<T>{

这根本不是有效的Java语法。这不是你如何标记一般方法。您已经通过在方法访问修饰符和返回类型之间放置类型参数 - <P> - 将该方法标记为通用。