在Java中为泛型类返回类型的方法/构造函数之前不提供/提供<t>的基本原理</t>

时间:2011-06-25 18:46:30

标签: java generics

在Java中为通用类返回类型的方法/构造函数之前不提供/提供的原因是什么?

我无法理解它。

有时它需要它,有时却不需要它。我们是否需要它为构造函数? 规则似乎是随机的,无法找到合理的解释。

3 个答案:

答案 0 :(得分:2)

方法定义中的

<T>表示类型在方法签名中定义,并且仅在该方法中使用。

答案 1 :(得分:2)

如果希望与该方法关联的泛型而不是包含类,请将<T>放在方法的返回类型之前。

class Foo {
    // T is associated with the method
    <T> T stuff(T x) ...
}

class Bar<T> {
    // T is associated with the class
    T stuff(T x) ...
}

class Baz<T> {
    // S is associated with the method, T with the class
    <S> T stuff(S x) ...
    <S> S otherStuff(T x) ...
}

class WTF<T> {
    // Legal, but redundant
    <T> T stuff(T x) ...
}

构造函数也不例外。可以将泛型放在构造函数中,如

class Weird {
    // T is associated with the constructor only
    <T> Weird(T arg) ...
}

但这不寻常。看到构造函数使用类级泛型更为常见,如

class Normal<T> {
    // T is associated with the class, as usual
    Normal(T arg) ...
}

答案 2 :(得分:0)

  

有时它想要它,有时候   不

在下面的例子中,没有必要,因为泛型类型被声明/定义为类定义的一部分:

public class Example<T> {

    public T generateItem() { return null; };

}

在下面的例子中,有必要,因为泛型类型是 NOT 声明/定义为类定义(或其他地方)的一部分:

public class Example {

    public <T> T generateItem() { return null; };

}

规则是:它是否在上下文中声明了?就是这样!