[英]Type safety: Unchecked cast when extending generics
我有以下方法
private ResponseEntity<? extends ResourceSupport> createResponse(boolean isError) {
if(isError){
return new ResponseEntity<ErrorResource>((ErrorResource) new ErrorResource());
}
return new ResponseEntity<ResourceSupport>(new ResourceSupport());
}
我調用此方法來獲取錯誤資源
ResponseEntity<ErrorResource> e = (ResponseEntity<ErrorResource>) createResponse(logoutResult, userId);
System.out.println(e.getError());
當我這樣做時,我得到這個錯誤:
"Type safety: Unchecked cast from ResponseEntity<capture#1-of ? extends ResourceSupport> to ResponseEntity<ErrorResource>"
有沒有一種方法可以在不抑制錯誤消息的情況下投射對象?
您使用相同的方法返回apples和oranges實例。 在運行時,由於java的類型擦除,系統無法知道是否允許該強制類型轉換,因此發出警告。 您有2種避免方法:
a)創建2種不同的方法:
private ResponseEntity<ResourceSupport> createResponse() {
return new ResponseEntity<ResourceSupport>(new ResourceSupport());
}
private ResponseEntity<ErrorResource> createErrorResponse() {
return new ResponseEntity<ErrorResource>(new ErrorResource());
}
b)通過將實際的ResourceSupport
實例作為參數傳遞,使方法完全通用:
private <T extends ResourceSupport> ResponseEntity<T> createResponse(T resource) {
return new ResponseEntity<T>(resource);
}
解決方案是:不要嘗試強制轉換為ResponseEntity<ResourceSupport>
,而將類型保留為ResponseEntity<? extends ResourceSupport>
ResponseEntity<? extends ResourceSupport>
:
ResponseEntity<? extends ResourceSupport> e = createResponse(logoutResult, userId);
System.out.println(e.getError());
無法將類型為ResponseEntity<ErrorResource>
和ResponseEntity<ResourceSupport>
彼此分配(嘗試)。
但是您的原始代碼試圖做到這一點-在沒有錯誤的情況下,您的createResponse
方法返回一個new ResponseEntity<ResourceSupport>(new ResourceSupport())
但是您嘗試將其ResponseEntity<ErrorResource>
轉換為ResponseEntity<ErrorResource>
不允許。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.