簡體   English   中英

Java 泛型未經檢查的強制轉換 - 可以在運行時檢查嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM