2013-09-23 46 views
-1

不确定我有以下的基类和子类:隐超构造与Java的泛型

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

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

我得到以下错误:隐式超级构造函数BaseClass的()是不确定的。必须明确调用另一个构造函数

我该如何解决这个问题?

回答

6

子类cosntructor更改为:

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

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

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

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

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

1

如果它要求明确地调用另一个构造函数,只要做到这一点:

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