你好我試圖實現一個通用的方法作爲控制器的基本方法,但我不明白的問題發生在genereric方法syngature。通用方法,等式約束
<T> ResponseEntity<T> makeApiCall(String path, HttpMethod httpMethod, T body, boolean isAdmin){
String sender = isAdmin ? adminHash : userHash;
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", sender);
headers.add("Content-Type", "application/json");
HttpEntity<T> entity = new HttpEntity<>(body,headers);
ResponseEntity<T> responseEntity = restTemplate.exchange(path, HttpMethod.POST, entity, body.getClass());
return responseEntity;
}
編譯錯誤我currenty有如下:
Incompatible equality constraint: T and capture of ? extends Object
「獲得類的唯一方法是使用類字面值,例如,如果T是字符串,則使用String.class,這排除了使用通用體類型,因爲沒有通用類文字」似乎與自身矛盾。無論如何,在編譯時編譯器可以找出泛型類型。那麼將'getClass()'結果賦給一個'Class '變量怎麼辦? –
@LewBloch:我認爲他的意思是'T'必須是一個可確定的類型。否則,如果'T'是一個參數化的類型,比如'Foo',那麼你將不得不提供一個'Class >',這並不安全。 –
newacct