繁体   English   中英

使用 generics 使 class 的方法能够返回它自己和它的子类实例

[英]Make method of class using generics be able to return both its own and its subclasses instances

我实现了以下 Java 类:

public class Data<T> {

    private List<T> data;

    public List<T> getData() {
        return this.data;
    }


    public Data<T> setData(List<T> data) {
        this.data = data;
        return this;
    }

    public Data<T> getAsNullIfEmpty() {
        if (this.data == null || this.data.isEmpty())
            return null;
        return this;
    }

}
public class IntegerData extends Data<Integer> {}

我希望getAsNullIfEmpty()方法能够被其子类实例调用。

IntegerData integerData = new IntegerData().getAsNullIfEmpty(); 引发以下编译错误: incompatible types: Data<java.lang.Integer> cannot be converted to IntegerData

我尝试将方法getAsNullIfEmpty()的主体更改为:

public <E extends Data<T>> E getAsNullIfEmpty() {
    if (this.data == null || this.data.isEmpty())
        return null;
    return this;
}

这不会编译,因为Data<T>不会扩展自身。 有没有办法在不重复覆盖每个子类中的方法或使用显式强制转换的情况下实现这一点?

您需要“通常”的技巧来让类的 generics 引用自身,以及不安全的强制转换。

public class Data<T, D extends Data<T, D>> {

    private List<T> data;

    public List<T> getData() {
        return this.data;
    }


    public D setData(List<T> data) {
        this.data = data;
        return (D) this;
    }

    public D getAsNullIfEmpty() {
        if (this.data == null || this.data.isEmpty())
            return null;
        return (D) this;
    }

}
public class IntegerData extends Data<Integer, IntegerData> { ... }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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