[英]Java type safety casting issue
我有兩節課,如下所示:
// Jackson annotated-class
public class User {
}
和:
// Jackson annotated-class
public class ResponseWrapper<ResultType> {
...
}
在特定操作期間,我需要執行強制轉換。
情況1:
ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult();
警告: Type safety: Unchecked cast from Object to ResponseWrapper<User>
情況2 :
Object o = result.getResult(); if ( o instanceof ReaponseWrapper<?> ) { ResponseWrapper<?> r = (ResponseWrapper<?>) result.getResult(); // OK }
沒有警告 。
情況3
Object o = result.getResult(); if ( o instanceof ResponseWrapper ) { ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult(); }
警告 (再次): Type safety: Unchecked cast from Object to ResponseWrapper<User>
如何執行從Object
到ResponseWrapper<User>
的類型安全轉換?
你不能 泛型是編譯時的幫助。 在運行時,Java使用類型擦除。 因此,Java無法在運行時檢查包裝器是ResponseWrapper<Foo>
還是ResponseWrapper<Bar>
。 它可以檢查的只是它是否是ResponseWrapper
。 這就是為什么您會收到這樣的警告。
使用泛型聲明getResult
,如下所示:
public <T extends ResponseWrapper> T getResult() {
...
}
如果getResult
方法來自無法更改的庫,則將無法修復警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.