在Java中为通用类返回类型的方法/构造函数之前不提供/提供的原因是什么?
我无法理解它。
有时它需要它,有时却不需要它。我们是否需要它为构造函数? 规则似乎是随机的,无法找到合理的解释。
答案 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; };
}
规则是:它是否在上下文中声明了?就是这样!