理解通用Java方法头

时间:2016-01-15 16:24:48

标签: java generics

我正在阅读Java herehere中的泛型,虽然我理解拥有它们的重点,但我在理解通用Java方法的标题时遇到了一些麻烦。我习惯了:

public returnType methodName(parameters){body}

令我困惑的是通用方法声明的规范:

public *genericType* returnType methodName(parameters){body}

public static <T> void fromArrayToCollection(Collection<T> c) {}

这种类型声明(静态和无效之间的<T>)有什么影响?它只是概述了方法参数的类型吗?

2 个答案:

答案 0 :(得分:4)

在这种情况下,<T>static之间的void表示“此方法中有一个泛型类型参数被称为T。”

比较案例1:

class Foo<T> {
     public void doFoo(Collection<T> items) ...
}

案例2:

class Foo {
    public <T> void doFoo(Collection<T> items) ...
}

和案例3:

class Foo {
    public void doFoo(Collection<T> items) ...
}

在第一种情况下,T是整个类的泛型类型,因此如果您调用doFoo,则传入的集合中的<T>必须相同{ {1}}作为T实例的泛型类型。

在第二种情况下,Foo<T>是仅在方法T中存在的泛型类型。

在案例3中,doFoo必须是实际类型,因为没有声明它是泛型类型参数。

答案 1 :(得分:2)

声明为返回类型的<T>引用参数中声明的<T>。这样你就知道如果你给你的方法提供一个字符串集合,你就会得到一个字符串。

总而言之,泛型类型使您能够在代码中引用类型而无需指定它。