[英]Java Generics .. Type parameter not allowed after class name on the constructor header
只是想知道为什么在构造函数的类名之后不允许使用类型参数。 我的意思是这背后的原因是什么。 是否因为已经在类头文件中定义了type参数,所以在构造函数中使用它就没有意义了?
Class A <E> {
public E e;
A <E> {
}
}
只是好奇
您可以使用与方法相同的语法为构造函数定义类型参数。
但是,重要的是要意识到这是一个新的类型参数,仅在构造函数执行期间可见; 如果恰好与该类上的类型参数具有相同的名称,则它将在较大范围内隐藏该参数。
class Foo<T>
{
<T> Foo(T bar) /* This "T" hides the "T" at the class level. */
{
...
如果在类级别定义泛型,则必须在类声明期间声明它们。
class A<T>{}
在声明构造函数时是否要声明T,例如:
class A {
public A<T>() {
}
}
但是在这种情况下,当您要声明文件时,不能在构造函数之前使用T:
class A {
private T t; // this will throw compilation error: T is undefined.
public A<T>() {
}
}
我认为这就是Sun为泛型定义现有语法的原因。
尽管可以将泛型用作构造函数的参数:
class A<T> {
public A(T t) {
}
}
好吧,至少以下内容似乎可以在Eclipse中编译:
public class A{
private boolean same;
public <T> A(T t1, T t2, Comparator<? super T> comparator){
this.same = (comparator.compare(t1, t2) == 0);
}
...
}
顾名思义,它是一个类型参数,因此它的范围比仅构造函数或方法还宽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.