Java: 泛型方法和返回类型

5
有人能解释一下以下代码中的返回类型是什么意思吗?
public static <T> ArrayList<T> a()
{       
       return null;
} 

并且

public static <String> ArrayList<Vector> a()
{       
       return null;
} 

我在Eclipse中输入了这些代码。它可能没有意义,但它不会产生编译器错误。 - peter
@BheshGurung 它会给出编译警告,但不会有编译错误。 - Colin D
它被称为通用方法 - Lion
1
在第二个例子中,你做了两件你可能不想做的事情。首先,你定义了一个名为String的通用参数,这也是一个流行类的简单名称,并且不遵循所有大写字母的命名约定(实际上只有一个大写字母,但我有时喜欢更多 - EXC表示异常类型,THIS表示类似于Enum的东西)。此外,你使用了一个泛型的原始形式,即Vector。更糟糕的是,你在泛型中使用了原始形式 - 这是一种“罕见的类型”(不像牛排)。 (哦,按照惯例,在泛型参数列表后添加一个空格 - 参数不是返回类型的一部分。) - Tom Hawtin - tackline
1个回答

7
public static <T> ArrayList<T> a() 

<T>的第一个出现引入了一个类型参数,该参数将在方法中可用。

实际返回类型是ArrayList<T>,其中T与第一个出现的相同。

您可以在此处阅读有关此的详细信息 - 泛型方法

在第二个示例中:

public static <String> ArrayList<Vector> a() {

尽管您引入了一个通用类型参数(即 String,它不像 java.lang.String 那样是实际类型或参数),但您并未使用它。此外,该方法始终返回一个 ArrayList<Vector>VectorArrayList) 。

加上空格后,我认为会更清晰易懂。尽管我认为 C# / Scala 语法中泛型类型在方法名之后引入的方式更加合理。 - user166390
是的,而且原帖作者似乎对类型参数和参数感到困惑。 - Bhesh Gurung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接