簡體   English   中英

動態返回類型 - Java泛型

[英]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函數。 它接受objAobjB並返回resultObjAresultObjB

我不能用接口包裝這兩個。 所以選擇被排除在外。

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>輸入一般地映射到ResultAList<MyClassB>輸入到ResultB ,那么我可以回答這是不可能的:沒有辦法用Java Generics表達結果類型的依賴性輸入類型。

從理論上說,你可以參數化MyClassAResultA ,如MyClassA<ResultA>但它很可能只是做一個惹出來的代碼。

即使你想寫兩個函數,如
public void doProcess(List<ObjectA> list); public void doProcess(List<ObjectB> list); 這是不可能的,因為泛型只是編譯時結構,因此兩個函數都有相同的擦除。

你能做的最好的就是有一個函數,並根據某些條件轉換你的對象。

暫無
暫無

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

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