我有一个类:
public abstract class Response<T> {
private boolean isSucessfull;
private T data;
public Response() {
throw new IllegalArgumentException();
}
public Response(boolean isSucessfull, T data) {
this.isSucessfull = isSucessfull;
this.data = data;
}
...
}
其他类用一些特定类型扩展它:
public class PlainResponse extends Response<byte[]>{
//
}
当我尝试创建 PlainResponse 实例时出现问题:new PlainResponse(success, responseData)
constructor PlainResponse in class PlainResponse cannot be applied to given types;
required: no arguments
found: boolean,byte[]
如您所料,我不是 Java 专家。但我已经预料到,我的类将使用它的父类(super class)的构造函数。
如何实现?
谢谢。
最佳答案
But I've expected, that my class will use the constructor of it's super class.
事实并非如此。构造函数不被继承。通常子类的创建方式与其父类截然不同,或者需要对其成员变量施加额外的不变量,因此通常让构造函数被继承并不是一个好主意。
所以你必须定义一个构造函数
public PlainResponse(boolean isSucessfull, byte[] data) {
super(isSuccessfull, data);
// optionally more work
}
在您的 PlainResponse
类和 Response
的所有其他子类中。
如果您没有在类中定义构造函数,Java 将为您创建一个没有参数的默认构造函数。这就是您收到特定错误消息的原因。
关于Java:带参数的抽象泛型类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960469/