ActionEvent.getSource:どのように適切にソースオブジェクトをキャストします

ヤコポLanzoni:

私はここで初心者のエラーを作ることも恐れています。私が持っているActionListener以下のが、私は警告を取得Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'内部のif声明を。どのように私はそれを解決することができますか?私はからメソッドを呼び出したいJComboBoxAPI。


私は警告を抑制することに興味を持っていないです。

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;
        }
    }

}
TROJAN:

抑制することなく警告を削除するには、ジェネリックと妥協し、コードへの変更する必要があります。

JComboBox<?> comboBox;
if (source instanceof JComboBox) {
    comboBox = (JComboBox<?>) source;
}

あなたの中からいずれかの方法を使用しようとしている場合やJComboBoxジェネリックを使用すると<E>、あなたはそこにキャストを使用することができます。例えば:

String s = (String) comboBox.getItemAt(0);

説明:

コンパイラは、あなたがするかどうかを知る方法はありませんので、警告が与えられたJComboBoxありますJComboBox<String>JComboBox<Integer>

キャストは実行時のものであり、Javaにおけるジェネリック型の安全性を確保するために、コードを読みやすくするためだけのプレースホルダです。種類消去、コンパイラのアップデートを使用して/バイトコード(詳細は発生しながら文をキャストしてジェネリックを含むすべての文修正ここに)。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=379890&siteId=1