3 回答

TA貢獻1887條經驗 獲得超5個贊
首先,讓方法返回T而不是Object:
public static <T> T getForEntity(...)
然后,實現它以返回一個 T。readValue返回正確的類,因為您傳入了Class<T>并且它的簽名也等同于public <T> T readValue(..., Class<T> clazz),所以您可以這樣做:
T obj = getResponseJsonMapper.readValue(getResponseJson, responseType);
return obj;

TA貢獻1802條經驗 獲得超5個贊
您只需要傳遞一個Class<T>參數。
請注意,您不需要對readValue方法響應進行強制轉換,因為您已經clazz作為參數傳遞,因此它返回一個clazz元素。
您的錯誤只是您將結果分配給了 Object 類型的對象。比退貨了。刪除不必要的賦值并直接從對 的調用結果中返回readValue。
public static <T> T getForEntity(String url, Class<T> clazz) throws InterruptedException,
ExecutionException, IOException {
Response getResponse = callWithHttpGet(url);
String getResponseJson = getResponse.getBody();
ObjectMapper getResponseJsonMapper = new ObjectMapper();
return getResponseJsonMapper.readValue(getResponseJson, clazz);
}

TA貢獻1883條經驗 獲得超3個贊
使用 T 作為返回參數并進行強制轉換(假設可以進行強制轉換 - 否則會出現運行時異常)。
public static <T> T getForEntity(String url, Class<T> responseType) throws InterruptedException, ExecutionException, IOException{
Response getResponse = callWithHttpGet(url);
String getResponseJson = getResponse.getBody();
ObjectMapper getResponseJsonMapper = new ObjectMapper();
T obj = (T)getResponseJsonMapper.readValue(getResponseJson, responseType);
return obj;
}
而且在特定情況下,您甚至可以跳過演員表(如果 ObjectMapper 已經返回正確的類型 - 例如杰克遜)。
添加回答
舉報