【问题标题】:Implicit super constructor is undefined with Java Generics [duplicate]Java泛型未定义隐式超级构造函数[重复]
【发布时间】:2013-09-28 02:17:02
【问题描述】:

我有以下基类和子类:

public class BaseClass<T> {
    public BaseClass(T value){
}

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
    }
} 

我收到以下错误:隐式超级构造函数 BaseClass() 未定义。必须显式调用另一个构造函数

我该如何解决这个问题?

【问题讨论】:

    标签: java generics java-6


    【解决方案1】:

    将您的子类构造函数更改为:

    public class NewClass<T> extends BaseClass<T> {
        public NewClass(T value){
            super(value);
        }
    } 
    

    如果你不添加super(value);,那么编译器会自动添加一个super();,它将链接到超类的0-arg构造函数。基本上,你原来的子类构造函数被编译成:

    public NewClass(T value){
        super();
    }
    

    现在你可以看到,它尝试调用0-arg 超类构造函数,编译器找不到。为什么?由于在超类中,您提供了 1-arg 构造函数,编译器不会在其中添加任何默认构造函数。因此出现了这个错误。

    你也可以通过在你的超​​类中给出一个显式的0-arg构造函数来避免这个问题,在这种情况下,你原来的子类代码可以正常工作。

    【讨论】:

      【解决方案2】:

      如果它要求显式调用另一个构造函数,就这样做:

      public class NewClass<T> extends BaseClass<T> {
          public NewClass(T value){
              super(value);
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 2020-06-05
        • 2014-06-26
        • 2013-09-20
        • 2010-11-14
        • 2013-02-24
        • 1970-01-01
        • 2014-10-02
        • 2018-06-27
        • 1970-01-01
        相关资源
        最近更新 更多