3 回答

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ù)他們是否知道字符串的值來決定使用哪一種。

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
}
}
添加回答
舉報