2015-10-16 189 views
2

我有一個泛型類是這樣的:鑄造Java對象泛型類型與已知類型參數

public class Box<T> { 
    ... 
} 

代碼後來我想投一個對象給Box類是這樣的:

Box<String> boxString = (Box<String>) object; 

但是編譯器和IDE在這裏發出警告。
可以通過不使用@SuppressWarnings以某種方式乾淨地避免警告嗎?

+1

都能跟得上。 Java有類型擦除,所以泛型不能在運行時檢查。唯一真正的解決方案是避免強制轉換爲Object。 – Nayuki

+1

這個警告是一件好事。它告訴你,轉換的類型參數部分不會在運行時進行類型檢查。如果你確定知道它總是有效的演員陣容,那麼使用'@SuppressWarnings(「unchecked」)'是合理的。 –

回答

3

如果object的類型是Object,那麼除了加入@SuppressWarnings("unchecked")之外,您無法避免該警告。

警告並非錯誤,如果您瞭解它們,則可以在代碼中包含一些代碼。

編輯:如註釋建議,將"unchecked"添加到註釋中。

+1

具體來說,'@SuppressWarnings(「unchecked」)'。 –

1

該警告是一件好事。它告訴你,轉換的類型參數部分不會在運行時進行類型檢查。如果你確定知道它總是有效的演員陣容,那麼使用@SuppressWarnings("unchecked")是合理的。

但是,避免警告比抑制它們要好。

如果您控制稍後需要投射的Box實例的構造,則可以對Box進行子類化,因爲它不是最終的。現在

public class BoxString extends Box<String> { 
    ... 
} 

你可以不投泛型:

if (object instanceof BoxString) { 
    BoxString boxString = (BoxString) object; 
    ... 
}