[英]How to safely cast generic wildcard "?" to known type parameter in Java?
[英]Cast java Object to a generic type with a known type parameter
我有一個像這樣的通用類:
public class Box<T> {
...
}
稍后在代碼中,我想以這種方式將Object轉換為Box類:
Box<String> boxString = (Box<String>) object;
但是編譯器和IDE會在此處發出警告。
我可以通過不使用@SuppressWarnings
完全避免警告嗎?
如果object
的類型為Object
,則只能通過添加@SuppressWarnings("unchecked")
來避免警告。
警告不是錯誤,如果您理解警告,則可以在代碼中包含一些警告。
編輯 :根據評論的建議,在注釋中添加了"unchecked"
。
警告是一件好事。 告訴您,在運行時不會對類型轉換的類型參數部分進行類型檢查。 如果可以肯定地確定它將始終是有效的轉換,則使用@SuppressWarnings("unchecked")
是合理的。
但是,避免警告比抑制警告更好。
如果控制稍后需要轉換的Box實例的構造,則可以將Box子類化,因為它不是最終的。
public class BoxString extends Box<String> {
...
}
現在,您無需使用泛型即可進行投射:
if ( object instanceof BoxString ) {
BoxString boxString = (BoxString) object;
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.