簡體   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