Java:带参数的抽象泛型类构造函数

标签 java generics

我有一个类:

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/

相关文章:

java - Jsoup - 获取名称中带有空格的类元素

Scala:使具体类型符合具有边界的泛型

delphi - 泛型会搞乱接口(interface)名称映射吗?

c# - 什么时候在 C# 中拥有公共(public)无参数构造函数很重要?

java - DateFormat 解析 - 不返回 UTC 格式的日期

java - 如何使通用图像加载器动态从SD卡获取图像

c# - 在 C# 中概括和聚合 XML 转储的最佳方法是什么?

swift - 为泛型类型参数声明类型别名的目的是什么

java - 从明天开始的所有日子和两个月前的所有日子并循环遍历它们

java - 将 Java 中的字符串转换为 SQL 中的 VARCHAR