[英]ActionEvent.getSource: how to cast properly the source Object
我擔心我可能在這里犯了一個新手錯誤。 我有下面的ActionListener
,但我在if
語句中收到警告Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'
。 我該如何解決? 我想從JComboBox
API 調用一個方法。
我對壓制警告不感興趣。
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Object source = actionEvent.getSource();
JComboBox<String> comboBox;
if (source instanceof JComboBox) {
comboBox = (JComboBox<String>) source;
}
}
}
要在不抑制的情況下刪除警告,您必須與泛型妥協並將代碼更改為:
JComboBox<?> comboBox;
if (source instanceof JComboBox) {
comboBox = (JComboBox<?>) source;
}
如果您打算使用JComboBox
中使用通用<E>
任何方法,您可以在那里使用強制轉換。 例如:
String s = (String) comboBox.getItemAt(0);
解釋:
發出警告是因為編譯器無法知道您的JComboBox
是JComboBox<String>
還是JComboBox<Integer>
。
轉換是運行時的事情,Java 中的泛型只是占位符,以確保類型安全並使代碼更具可讀性。 使用類型擦除,編譯器在生成字節碼時使用強制轉換語句更新/修改所有涉及泛型的語句(更多信息請點擊此處)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.