Frage

Ich bin ein großer Fan von Auto-Boxen in Java, da es viele hässliche Kesselplattencode spart. Ich habe jedoch festgestellt, dass automatisches Unboxing unter bestimmten Umständen verwirrend ist, unter denen das Zahlenobjekt möglicherweise null ist. Gibt es eine Möglichkeit, festzustellen, wo automatische Unboxen in einer Codebasis mit einer Javac-Warnung stattfinden? Jede andere Lösung zum Erkennen von Ereignissen nur von Unboxing (z.

Um zu verdeutlichen, möchte ich nicht, dass Warnungen beim Boxen generiert werden - nur Unboxing.

Hier ist ein einfaches Beispiel für einen Code, der zu verwirrenden NullPointerexceptions führen kann:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
War es hilfreich?

Lösung

Mit Eclipse können Sie die Syntax-Farben-Box- und Unboxing-Operationen (jedoch nicht die eine oder andere). Ich habe sie auf leuchtend rot eingestellt: Wenn beide passiert, bedeutet dies, dass ich schlampig in den passenden Parametern und Argumenten war.

Andere Tipps

Jawohl. In Sonnenfinsternis:

Einstellungen-> Java-> Compiler-> Fehler/Warnungen-> Potentielle Programmierprobleme-> Box- und Unboxing-Conversions

Leider gibt es nicht. Dies ist eines der Probleme mit automatischen Unboxing -Nummern. Du kannst

  • Initialisieren Sie es auf einen Standardwert, wie z. private Integer value = 0
  • Überprüfen Sie nach einem Null return value != null ? value : 0

Persönlich bevorzuge ich die erste Methode. Im Allgemeinen würde ich denken, Sie hätten nicht zu viele Fälle, in denen Sie eine Nullnummer haben sollten.

Warum verwenden Sie auch eine große Ganzzahl, um den Wert zu speichern? Wenn Sie nur ein wenig int zurückkehren, warum nicht so aufbewahren?

Ich bezweifle, dass dies ein Warnfall sein wird. Dies ist eine der Macken des Auto-Boxens.

Joshua Bloch spricht dies in seinem Buch "Effektiver Java" an. Grundsätzlich versucht der Compiler, mehr für Sie zu tun, was erwartet wird. Mit anderen Worten, diese Art von Problem hängt häufiger mit der Nutzung zusammen. Infolgedessen ist es schwierig, den Fehler zu "erkennen", wie der Fehler semantisch gesehen einfach nicht da ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top