亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 POJO 中使用泛型

在 POJO 中使用泛型

catspeake 2021-07-16 18:40:55
我希望根據使用泛型的輸入從一個方法返回多個不同的 POJO 對象響應。POJO 不是層次結構的一部分,即是完全獨立的 POJO//POJO1class A1  implements Serializable {   // Instance variable with getter and setter}//POJO2class B1 implements Serializable {  // Instance variable with getter and setter}class XYZ {   private ObjA objA;   private ObjB objB;   public <T>Optional<T>  getResponse(String input) {       if(input.equals("A")) {                  return objA.getResponse();  // This returns an optional of POJO A1 or Optional.empty()       } else {           return objB.getResponse();  // This returns an optional of POJO B1 or Optional.empty()       }   }}但是我得到了錯誤 Incompatible types. Required Optional<T> but 'of' was inferred to Optional<T>: no instance(s) of type variable(s) exist so that A1 conforms to T inference variable T has incompatible bounds: equality constraints: T lower bounds: A1我嘗試將通用標簽附加到 POJO 類定義,但無濟于事。有人可以指出我哪里出錯了嗎?
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

問題是您試圖讓編譯時類型T取決于 的運行時值input,這是不可能的。由于該值是動態的,您無法知道將返回哪種類型,因此正確的做法是使用Optional<?>:


public Optional<?>  getResponse(String input) {

   if(input.equals("A")) {       

       return objA.getResponse();  // This returns an optional of POJO A1 or Optional.empty()

   } else {

       return objB.getResponse();  // This returns an optional of POJO B1 or Optional.empty()

   }

}

如果 的值input 是靜態已知的,您可以創建 2 個具有不同返回類型的方法:


public Optional<A1> getResponseA1() {

    return objA.getResponse();

}


public Optional<B1> getResponseB1() {

    return objB.getResponse();

}

并調用其中之一而不是傳遞字符串,例如:


// Optional<?> result = xyz.getResponse("A"); // Not this

Optional<A1> result = xyz.getResponseA1(); // But this

或者您可以同時使用這兩種方法,并讓調用者根據他們是否知道字符串的值來決定使用哪一種。


查看完整回答
反對 回復 2021-07-29
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

您是否希望根據函數的輸入來確定類型?


public <T>Optional<T>  getResponse(String input) {

此函數的返回 T 將始終是調用方法中指定的。


而是考慮這樣的事情:


public Optional<Serializable> getResponse(String input) {

然后在使用該功能時,您可以執行以下操作:


Optional<Serializable> s = getResponse("test");

s.ifPresent(sPresent -> {

    if(sPresent instanceof A1.class) {

        //logic for A1

    } else if(sPresent instanceof B1.class) {

        //logic for B1

    } else {

        //throw exception

    }

}


查看完整回答
反對 回復 2021-07-29
  • 3 回答
  • 0 關注
  • 345 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號