[英]Java generics unchecked cast - Possible to check at runtime?
// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
Object result = continuation.getAttribute("result");
return (T) result;
}
是否(在運行時)可以驗證result
可以轉換為T
嗎?
不可以。要在運行時檢查,您需要一個類的實例,以便您可以使用isAssignableFrom 。 由於類型擦除,您無法使用T
訪問此內容。
不在此方法內。 與T
相關的所有類型信息都被編譯器擦除。
在運行時是可能的,但您需要一個泛型類型標記。 通常你將它傳遞給泛型類型的構造函數
class SomeGeneric<T>
private Class<T> token;
public SomeGeneric(Class<T> token) {
this.token=token;
}
然后在您的方法中,您可以在運行時檢查它
return token.cast(result) // throws ClassCastException
類型擦除將在運行時用Object
替換T
類型信息在運行時將不存在,因此您無法檢查類型。
您可以通過正式嘗試捕獲 ClassCastException 來檢查它。 不過,它不會使警告消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.