簡體   English   中英

ActionEvent.getSource:如何正確轉換源對象

[英]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);

解釋:

發出警告是因為編譯器無法知道您的JComboBoxJComboBox<String>還是JComboBox<Integer>

轉換是運行時的事情,Java 中的泛型只是占位符,以確保類型安全並使代碼更具可讀性。 使用類型擦除,編譯器在生成字節碼時使用強制轉換語句更新/修改所有涉及泛型的語句(更多信息請點擊此處)。

暫無
暫無

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

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