簡體   English   中英

使用遞歸調用確定泛型類型

[英]Determine Generic type with recursive call

我有一個有兩個參數的方法:

public <P, T> T getT(P p, Class<T> returnType) {
    //This method converts p to an instance of the type T.
}

或多或少,代碼遍歷 returnType 的所有 setter 並調用 p 上的 getter 方法:

T t = new T();
t.setBla(p.getBla());

現在,在遍歷 T 類的所有 setter 時,我遇到了一個 Collection。 我想為集合中的每個項目遞歸地調用它自己的方法。 我的問題是,我無法指定返回類型,因為我無法弄清楚我收到的集合的返回類型。 像這樣(沒有反射的偽代碼):

for(Object o : list) {
    return getT(o, ???);
}

我嘗試使用自定義注釋來解決它,我在其中指定了該集合的 returnType,但我不能在我的注釋中使用泛型:

public @interface ReturnType {
    public Class<?> value();
}

所以我在 getT() 中的論點不匹配。 如何在不更改 getT() 方法(getT(P p, Class t))的通用類型的情況下解決此問題?

如果您可以將泛型指定為另一個類的擴展,則可以改為編寫如下內容:

public <P, T> T getT(P p, Class<T extends SomeClass> returnType){
//code
}

然后

for(Object o : list) {
return getT(o, SomeClass.class);
}

public @interface ReturnType { 
public Class<SomeClass> value();
} 

暫無
暫無

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

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