我有一個泛型類是這樣的:鑄造Java對象泛型類型與已知類型參數
public class Box<T> {
...
}
代碼後來我想投一個對象給Box類是這樣的:
Box<String> boxString = (Box<String>) object;
但是編譯器和IDE在這裏發出警告。
可以通過不使用@SuppressWarnings
以某種方式乾淨地避免警告嗎?
我有一個泛型類是這樣的:鑄造Java對象泛型類型與已知類型參數
public class Box<T> {
...
}
代碼後來我想投一個對象給Box類是這樣的:
Box<String> boxString = (Box<String>) object;
但是編譯器和IDE在這裏發出警告。
可以通過不使用@SuppressWarnings
以某種方式乾淨地避免警告嗎?
如果object
的類型是Object
,那麼除了加入@SuppressWarnings("unchecked")
之外,您無法避免該警告。
警告並非錯誤,如果您瞭解它們,則可以在代碼中包含一些代碼。
編輯:如註釋建議,將"unchecked"
添加到註釋中。
具體來說,'@SuppressWarnings(「unchecked」)'。 –
該警告是一件好事。它告訴你,轉換的類型參數部分不會在運行時進行類型檢查。如果你確定知道它總是有效的演員陣容,那麼使用@SuppressWarnings("unchecked")
是合理的。
但是,避免警告比抑制它們要好。
如果您控制稍後需要投射的Box實例的構造,則可以對Box進行子類化,因爲它不是最終的。現在
public class BoxString extends Box<String> {
...
}
你可以不投泛型:
if (object instanceof BoxString) {
BoxString boxString = (BoxString) object;
...
}
都能跟得上。 Java有類型擦除,所以泛型不能在運行時檢查。唯一真正的解決方案是避免強制轉換爲Object。 – Nayuki
這個警告是一件好事。它告訴你,轉換的類型參數部分不會在運行時進行類型檢查。如果你確定知道它總是有效的演員陣容,那麼使用'@SuppressWarnings(「unchecked」)'是合理的。 –