Haben Sie eine schöne Alternative zu Apache Commons Validate oder Guava Preconditions wissen, dass Illegal statt Nullpointer werfen würde, wenn geprüft wird, ob Objekt nicht null (außer Spring Assert) ist?Voraussetzungen Bibliothek Illegal werfen für NotNull zu überprüfen
Ich bin mir bewusst, dass Javadocs sagen:
Anwendungen Instanzen dieser Klasse werfen sollte [Nullpointer] andere illegale Verwendungen des Null-Objekt anzuzeigen.
Trotzdem mag ich es einfach nicht. Für mich bedeutete NPE immer, dass ich einfach vergessen habe, irgendwo NULL-Referenzen zu bekommen. Meine Augen sind so trainiert, dass ich Logs mit einer Geschwindigkeit von wenigen Seiten pro Sekunde sehen kann und wenn ich das tue, ist immer ein Bugalarm in meinem Kopf aktiviert. Daher wäre es ziemlich verwirrend für mich, dass es dort geworfen wird, wo ich eine IllegalArgumentException erwarte.
Sagen, ich habe eine Bohne:
public class Person {
private String name;
private String phone;
//....
}
und eine Service-Methode:
public void call(Person person) {
//assert person.getPhone() != null
//....
}
In einem bestimmten Kontext es in Ordnung sein kann, dass eine Person kein Telefon hat (meine Oma nicht besitzt irgendein). Aber wenn Sie solche Person anrufen möchten, ruft es für mich die Anruf Methode mit einem IllegalArgument übergeben. Schauen Sie sich die Hierarchie an - NullPointerException ist nicht einmal eine Unterklasse von IllegalArgumentException. Es sagt Ihnen im Grunde - Wieder haben Sie versucht, einen Getter auf null Referenz aufzurufen.
Außerdem gab es bereits Diskussionen und es gibt this nette Antwort, die ich voll und ganz unterstütze. Also meine Frage ist nur - brauche ich so hässliche Dinge zu tun:
Validate.isTrue(person.getPhone() != null, "Can't call a person that hasn't got a phone");
es auf meine Art zu haben, oder gibt es eine Bibliothek, die nur Illegal für eine NotNull Check werfen würde?
Nicht klar, was Sie unter "eine korrekt behandelte Situation" verstehen. Sicher, es handelt sich nicht um eine zufällige Dereferenzierung von 'null', sondern um dasselbe: Eine Methode wird aufgerufen, wobei 'null' für einen Parameter übergeben wird, der nicht 'null' sein kann, was genauso viel wie ein Programmierfehler ist . – ColinD
sicher, aber in diesem Fall NPE (in meiner Interpretation) behandelt wird, wird die IllegalArgumentException nicht behandelt. Und tatsächlich ist es normalerweise von einigen Servlet-Ebenen Ausnahme-Handler oder SMS. – macias
FWIW, das JDK legt einen ziemlich festen Präzedenzfall fest, dass * es * damit rechnet, dass ungültige Nullen behandelt werden. –