簡體   English   中英

實例化泛型類型時發出警告

[英]Warning in instantiating a generic type

我有一個用於實例化泛型類型的代碼段,如下所示:

public class GenericMessageMapper<I ,X>
{
   public X xFromI(I imf)
   {
      // do thing by imf argument
      Class<X> clazz = (Class<X>)((ParameterizedType)
                                   this.getClass()
                                       .getGenericSuperclass())
                                       .getActualTypeArguments()[1];
      X x = clazz.newInstance(); 
   }
}

上面的代碼運行良好,但是MyEclipse通過以下消息在代碼上顯示警告(在准備clazz變量行時,該行下方為黃色): Type safety: Unchecked cast from Type to Class<X>

我在xFromI方法上方臨時添加以下注釋:

@SuppressWarnings("unchecked")

該警告的原因是什么?解決方法是什么?

一個警告就是這樣。 一個警告。 有時警告是無關緊要的,有時則是無關緊要的。 它們通常被用來引起您對編譯器認為可能是但可能不是問題的注意。

在強制轉換的情況下,在這種情況下總是會發出警告。 如果您完全確定特定的類型轉換將是安全的,則應考慮在該行之前添加這樣的注釋:

@SuppressWarnings (value="unchecked")

請參閱類型安全性:未經檢查的演員表

這僅意味着該類的類型僅​​在運行時才知道,因此可能會出現這樣的情況:您認為應該獲得一個X類型的類,但實際上它是其他類型的(它在編譯時不知道)因為X可以是任何類型)。

基本上,您可以忽略此警告。

ftom2是正確的-在這種情況下,通常應在強制轉換之前執行實例檢查( instanceof )。 但是在您的情況下,這是不可能的,因為Java中的泛型是通過擦除實現的。 Class<X>不是固定類型,因此無法將其用於實例檢查,並且關閉警告的唯一方法是使用@SuppressWarnings(value = "unchecked") 要了解更多關於泛型,你可以使用這個書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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