第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在 POJO 中使用泛型

在 POJO 中使用泛型

catspeake 2021-07-16 18:40:55
我希望根據(jù)使用泛型的輸入從一個方法返回多個不同的 POJO 對象響應。POJO 不是層次結(jié)構的一部分,即是完全獨立的 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條經(jīng)驗 獲得超4個贊

問題是您試圖讓編譯時類型T取決于 的運行時值input,這是不可能的。由于該值是動態(tài)的,您無法知道將返回哪種類型,因此正確的做法是使用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 是靜態(tài)已知的,您可以創(chuàng)建 2 個具有不同返回類型的方法:


public Optional<A1> getResponseA1() {

    return objA.getResponse();

}


public Optional<B1> getResponseB1() {

    return objB.getResponse();

}

并調(diào)用其中之一而不是傳遞字符串,例如:


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

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

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


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

TA貢獻1811條經(jīng)驗 獲得超4個贊

您是否希望根據(jù)函數(shù)的輸入來確定類型?


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

此函數(shù)的返回 T 將始終是調(diào)用方法中指定的。


而是考慮這樣的事情:


public Optional<Serializable> getResponse(String input) {

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


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 關注
  • 344 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號