Überprüfung Ich habe das folgende Stück von Java-Code:Wie Eclipse-(Java) konfigurieren benutzerdefinierte Behauptung zu erkennen, wenn gegen mögliche Nullzeiger
public void silence(final Object key) {
final Chain chain = (Chain)getChain(key);
checkPrecondition(chain != null);
chain.silence();
}
Der checkPrecondition Aufruf wirft eine Laufzeitausnahme, wenn Kette null ist, aber von Eclipse scheint nicht zu "bekommen": es sagt chain.silence() ist ein möglicher Nullzeigerzugriff (Warnung). Frage: Wie kann ich Eclipse "sagen", dass checkPrecondition() sicherstellt, dass die Kette nicht null ist, d. H. Den Charakter einer Assertion hat? Ich weiß, dass ich diese Warnung deaktivieren kann, aber das möchte ich lieber nicht tun, da dies in anderen Situationen gerechtfertigt sein könnte.
Interessanterweise verschwindet die Warnung, wenn ich den Aufruf checkPrecondition() entferne (was genau der Fall ist, in dem ich es erwarten würde).
Ich verwende Eclipse 4.4.2 (32 Bit) unter Windows. Java VM ist 1.3 (!). Das Update auf neuere Versionen von beiden ist derzeit keine Option.
Unzusammenhängend: da Sie sich Gedanken über die Code-Qualität machen ... überlegen Sie, ob Sie wirklich diesem hässlichen Ansatz folgen wollen, überall "final" zu setzen. Wenn die Kette final ist, wird dieser Methode der Wert * null * hinzugefügt. Es ist nur Linienrauschen, das keinem wirklichen Zweck dient. – GhostCat
In diesem Fall hat die Verwendung von "final" zwar begrenzten Nutzen, aber auch keine Kosten. Also kein Verlust insgesamt. In anderen Zusammenhängen kommuniziert die Verwendung von "final" die Absicht des Programmierers und kann verursachen, dass Codierungsfehler zum Zeitpunkt der Kompilierung und nicht durch langwierige Tests erkannt werden. Unsere Kodierungsrichtlinie fordert explizit die Verwendung von "final", und das gilt auch für die meisten modernen und ernsthaften Kodierungsrichtlinien, die ich gesehen habe. Sehr hoher Nutzen! – FreeSpirit64
Und deshalb investierten die Java-Leute wertvolle Zeit in die Verbesserung des Compilers, um ** effektiv ** finale Variablen zu erkennen - damit Sie für lokale Variablen, die sich danach nicht ändern, nicht endgültig schreiben müssen ;-). .. und wie du mich neugierig gemacht hast: Kannst du ein paar Beispiellinks geben? – GhostCat