簡體   English   中英

Java通用通配符

[英]java generic wildcards

目前,我正在使用服務接口,該服務接口基於主鍵檢索域對象。 但是我感到我沒有有效地使用泛型。

基礎域對象如下所示:

public interface DomainObject<PK extends Serializable> extends Serializable {
    PK getID();
}

我的服務界面如下所示:

public interface LoadService<T extends DomainObject<PK>, PK extends Serializable> {
    T load(PK ID);
}

這行得通,但是,即使在T內已經知道PK類型,我也必須在服務泛型中指定PK類型。有什么辦法可以避免必須在LoadService接口中再次定義我的PK? 就像是:

LoadService<T extends DomainObject<? extends Serializable as PK> { ... }

幫助將不勝感激!

無法避免這種情況,因為您在'LoadService'中使用了PK類。 我的意思是,您可以像這樣定義服務

interface LoadService<T extends DomainObject<?>> {
    void store(T data);
}

但是,如果使用PK類,則不是這種選擇,因為編譯器會檢查PK類型是否與域對象類型兼容。

另一個選擇是從DomainObject刪除類型參數,即執行以下操作:

interface DomainObject extends Serializable {
    Serializable getID();
}

如果T既擴展了DomainObject又實現了Serializable ,則嘗試對type參數使用多個范圍:

interface LoadService<T extends DomainObject<T> & Serializable> {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM