Warning: unchecked

Herr Kaiser

Bekanntes Mitglied
Hi Forum,

Netbeans beanstandet bei mir vom eigenen GUI-Builder generierten Code. Folgende Zeile:

Java:
comboTest.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

wirft beim Compilieren die beiden folgenden Warnungen:

warning: [unchecked] unchecked call to DefaultComboBoxModel(E[]) as a member of the raw type DefaultComboBoxModel comboTest.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); where E is a type-variable: E extends Object declared in class DefaultComboBoxModel

warning: [unchecked] unchecked call to setModel(ComboBoxModel<E>) as a member of the raw type JComboBox comboTest.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); where E is a type-variable: E extends Object declared in class JComboBox



Aus der bisherigen Suche und Recherche zum Thema habe ich geschlussfolgert, dass ich den Datentyp mit <String> spezifizieren muss. Mir ist das aber in dieser Zeile bisher syntaktisch nicht richtig gelungen. Hättet Ihr einen Rat? Mir ist klar, dass ich die Warnung vermutlich ignorieren und deren Ausgabe unterdrücken könnte. Aber das befriedigt mich nicht. Außerdem kann ich Anfänger ja was lernen. Wie müsste die Syntax aussehen, um die Warnung überflüssig zu machen?

Zusatzfrage: Netbeans verbittet sich ja das Editieren des automatisch generierten Codes. Kann man das deaktiveren oder muss ich GUI-Builder-Code immer über einen externen Editor verändern?

Danke im Voraus! 🙂
 
Zuletzt bearbeitet:
Set Java 1.7 hat JComboBox (und das Model) einen Typparameter. Mit
new javax.swing.DefaultComboBoxModel<String>(...)
müßte es gehen. Die JComboBox steht wohl noch als
private JComboBox comboTest;
irgendwo, da müßte auch noch ein
private JComboBox<String> comboTest;
hin.

Vermutlich wird der GUI-Builder bald aktualisiert, das ist erst ganz neu und dort offenbar noch nicht drin. Zu weiteren NetBeans-spezifischen Fragen lass' ich mal andere vor... 😉
 
Danke, Marco,

ja, super, ich hatte einen dummen Schreibfehler begangen. Genau so, wie du es vorgeschlagen hast, funktioniert es jetzt.

Java:
private javax.swing.JComboBox<String> comboTest = new javax.swing.JComboBox<String>();
comboTest.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

Einzige verbleibende Irritation:
Der Compiler hat nichts mehr zu meckern, aber in der IDE erscheint in der zweiten veränderten Zeile nun der Hinweis:
redundant type arguments in new expression (use diamond operator instead) - welchen ich doch soeben eingefügt habe, oder? Wird der noch an anderer Stelle gewünscht (grübel)?

Vielen Dank für deine Hilfestellung! 🙂
 
Zuletzt bearbeitet:
Zugegeben, diese Warnung kenne ich nicht, weil ich meistens noch mit 1.6 arbeite... der Diamond-Operator ist das, was rauskommt, wenn man den "String" wegläßt
comboTest.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] {...}));

Hmmmmm... einerseits ist der Operator zwar praktisch, speziell wenn man statt
List<Map<String,List<Integer>>> list = new ArrayList<Map<String,List<Integer>>>();
einfach schreiben kann
List<Map<String,List<Integer>>> list = new ArrayList<>();
aber ... ich finde, dass die erste Variante keine Warnung generieren sollte ... vermutlich ist es auch "nur" eine Warnung der IDE...
 

Zurück
Oben