[英]Dynamic return type - Java Generics
我有兩個相似的對象(實際上是實體)。 從一個函數中,我得到其中一個。 所以我知道我在運行時只得到了哪一個。
我需要對我得到的對象進行處理。 兩者都有相同的過程集。 所以我想寫這兩個類的Generic函數。 我試着寫,但我不清楚如何實現這一點。
List<MyClassA> objAList;
List<MyClassB> objBList:
List<ResultA> resultObjAList;
List<ResultB> resultObjBList;
objAList = getResult();
objBList = getResult()
if ( objAList != null ) {
// Set of function calls on ObjA to process further. For ex:
resultObjAList = doProcess(objAList);
} else {
// Same set of function class to process. For Ex:
resultObjBList = doProcess(objBList);
}
在幾次嘗試之后,我將決定編寫兩個看起來類似於處理每個類的不同函數。
注意上面的doProcess
函數。 它接受objA
或objB
並返回resultObjA
或resultObjB
。
我不能用接口包裝這兩個。 所以選擇被排除在外。
doProcess
看起來像這樣:
List<ResultA> doProcess( List<MyClassA> A ) {
for ( MyClassList a : A ) {
a.getSomething();
doanotherProcess(a.getxya(), a.getABC());
....
}
return AnotherListOfType_ResultA;
}
是否可以為此編寫通用函數?
如果你想將List<MyClassA>
ResultA
List<MyClassA>
輸入一般地映射到ResultA
和List<MyClassB>
輸入到ResultB
,那么我可以回答這是不可能的:沒有辦法用Java Generics表達結果類型的依賴性輸入類型。
從理論上說,你可以參數化MyClassA
與ResultA
,如MyClassA<ResultA>
但它很可能只是做一個惹出來的代碼。
即使你想寫兩個函數,如
public void doProcess(List<ObjectA> list);
和public void doProcess(List<ObjectB> list);
這是不可能的,因為泛型只是編譯時結構,因此兩個函數都有相同的擦除。
你能做的最好的就是有一個函數,並根據某些條件轉換你的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.