public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(Integer.valueOf(4));
list.add(null);
int k = list.get(0); // Warnung
for (int j : list)
{
System.out.println(j); // warnungsfrei in NullPointerException
}
}
}
bei mir gibts keine Warnung zur for-each-Schleife mit primitiven Datentyp,
bei anderen ebenso? auch andere IDEs? gibts bekannte Erklärungen?
sollte man normalerweise gar nicht zu hinkommen, aber gefährlich schon…
edit: für Integer[] gehts immerhin
Bei Eclipse Luna das gleiche. Die Warnung bei int k ist übrigens keine Unboxing-Warnung, sondern nur eine, dass die Variable nie verwendet wird. Auch bei Integer[] nehme ich an, dass es das bei Dir ist.
Habe in “Properties -> Java Compiler -> Errors/Warnings : Potential programming Problems” geschaut. Dort steht bei “Boxing and unboxing conversions” Ignore. Das war mal anders. Denke, dass zu viele Leute die Warnung als sinnlos empfunden haben. Nach dem Motto: “Ich weiß, was ich tue” und dass deswegen das Default auf Ignore gesetzt wurde.
in meinem Test-Projekt für oftmals Forum-Code habe ich die Unused-Warnung ausgeschaltet, deine Annahmen zu dem was bei mir ist sind etwas sehr forsch ![:wink: :wink:](https://forum.byte-welt.net/images/emoji/twitter/wink.png?v=9)
mit Verwendung im Code wäre es aber besser gewesen, ja
wie sollte ‚es‘ auch bei Integer[] sein, da brauche ich doch dieselbe for-Schleife dazu um dasselbe zu testen,
aller Wahrscheinlichkeit dann auch System.out.println()-Verwendung der Schleifenvariabe wieder mit dabei
ausgeschaltete Boxing-Warnung würde alles hier obsolet machen,
hoffentlich kein Grund für Java/ Eclipse, für for-each die Prüfung generell zu deaktivieren
Luna habe ich auch, mit den ersten 5 Wörtern bestätigst du ja alles im Wesentlichen
, danke
{
public static void main(String[] args)
{
List<Integer> list = new ArrayList<>();
list.add(Integer.valueOf(4));
list.add(null);
int k = list.get(0); // Unboxing-Warnung
System.out.println(k);
for (int j : list)
{
System.out.println(j); // warnungsfrei in NullPointerException
}
Integer[] inti = new Integer[4];
for (int j : inti) // Unboxing-Warnung
{
System.out.println(j);
}
}
}
So mit Deinem neuen Code und eingeschalteten Boxing-Warnings sieht es jetzt (wie nicht anders zu erwarten) genauso aus wie bei Dir. Da for-each über Iterables (im Gegensatz zur Arrays) im Grunde eine Kurzschreibweise für Iteration mittels Iterator ist, habe ich Deinen Code erweitert um:
for (Iterator<Integer> iter = list.iterator(); iter.hasNext(); k = iter.next()) { // Hier unboxing Warnung
System.out.println(k);
}
Wie im Kommentar geschrieben, kommt hier die Warnung. Würde bei for-each also von einer “Warnungslücke” des Eclipse-Compilers ausgehen… Der javac des JDK 8 (Oracle) warnt übrigens gar nicht.