ActionEvent.getSource: comment lancer correctement la source objet

Jacopo Lanzoni:

Je crains que je formulerai une erreur de débutant ici. Je le ActionListenerci - dessous, mais je reçois l'avertissement Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'dans la ifdéclaration. Comment puis-je le résoudre? Je veux appeler une méthode de l' JComboBoxAPI.


Je ne suis pas intéressé à supprimer l'avertissement.

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

}
TROIE:

Pour supprimer l'avertissement sans supprimer, vous devrez faire des compromis avec les génériques et changer le code:

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

Et si vous allez utiliser une méthode de JComboBoxqui utilise le générique <E>, vous pouvez utiliser la coulée là. Par exemple:

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

Explication:

L'avertissement a été donné parce qu'il n'y a aucun moyen pour le compilateur de savoir si votre JComboBoxest un JComboBox<String>ou JComboBox<Integer>.

Le casting est une chose d'exécution et génériques en Java ne sont que des espaces réservés pour assurer la sécurité de type et de rendre le code plus lisible. Utilisation du type Erasure, les mises à jour du compilateur / modifie toutes les déclarations portant sur les médicaments génériques avec des déclarations casting tout en générant le code octet (plus d'info ici ).

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=379937&siteId=1
conseillé
Classement