繁体   English   中英

Java泛型..类型参数不允许在构造函数标头上的类名称之后

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM