Je crains que je formulerai une erreur de débutant ici. Je le ActionListener
ci - dessous, mais je reçois l'avertissement Unchecked cast: 'java.lang.Object' to 'javax.swing.JComboBox<java.lang.String>'
dans la if
déclaration. Comment puis-je le résoudre? Je veux appeler une méthode de l' JComboBox
API.
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;
}
}
}
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 JComboBox
qui 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 JComboBox
est 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 ).