Keine Boxing-Warnung for-each (Eclipse)

    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:
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 :wink: , 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.