{"id":3718,"date":"2017-02-25T00:15:48","date_gmt":"2017-02-24T22:15:48","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3718"},"modified":"2017-02-25T00:15:48","modified_gmt":"2017-02-24T22:15:48","slug":"null-pruefungen-mit-eingebauter-ausnahmebehandlung","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/02\/null-pruefungen-mit-eingebauter-ausnahmebehandlung\/","title":{"rendered":"null-Pr\u00fcfungen mit eingebauter Ausnahmebehandlung"},"content":{"rendered":"<p>Traditionell gilt es, null als Argument und in den R\u00fcckgaben zu vermeiden. Es ist daher gut, als Erstes in einem Methodenrumpf zu testen, ob die Argumente ungleich null sind \u2013 es sei denn, das ist unbedingt gew\u00fcnscht.<\/p>\n<p>F\u00fcr diese Tests, dass Referenzen ungleich null sind, bietet Objects ein paar requireNonNullXXX(\u2026)-Methoden, die null-Pr\u00fcfungen \u00fcbernehmen und im Fehlerfall eine NullPointerException ausl\u00f6sen. Diese Tests sind praktisch bei Konstruktoren oder Settern, die Werte initialisieren sollen, aber verhindern m\u00f6chten, dass null durchgeleitet wird.<\/p>\n<p>Beispiel:\u00a0Die Methode setName(\u2026) soll kein name-Argument gleich null erlauben:<\/p>\n<pre>public\u00a0void\u00a0setName(\u00a0String\u00a0name\u00a0)\u00a0{\n \u00a0this.name\u00a0=\u00a0Objects.requireNonNull(\u00a0name\u00a0);\n }<\/pre>\n<p>Alternativ ist eine Fehlermeldung m\u00f6glich:<\/p>\n<pre>public\u00a0void\u00a0setName(\u00a0String\u00a0name\u00a0)\u00a0{\n \u00a0this.name\u00a0=\u00a0Objects.requireNonNull(\u00a0name,\u00a0\"Name\u00a0darf\u00a0nicht\u00a0null\u00a0sein!\"\u00a0);\n }<\/pre>\n<p>class\u00a0java.util.Objects<\/p>\n<ul>\n<li>static&lt;T&gt;TrequireNonNull(Tobj)<br \/>\nL\u00f6st eine NullPointerException aus, wenn obj gleich null Sonst liefert sie obj als R\u00fcckgabe. Die Deklaration ist generisch und so zu verstehen, dass der Parametertyp gleich dem R\u00fcckgabetyp ist.<\/li>\n<li>static&lt;T&gt;TrequireNonNull(Tobj,Stringmessage)<br \/>\nWie requireNonNull(obj), nur dass die Meldung der NullPointerException bestimmt wird.<\/li>\n<li>static&lt;T&gt;TrequireNonNull(Tobj,Supplier&lt;String&gt;messageSupplier)<br \/>\nWie requireNonNull(obj, message), nur kommt die Meldung aus dem messageSupplier. Das ist praktisch f\u00fcr Nachrichten, deren Aufbau teurer ist, denn der Supplier schiebt die Kosten f\u00fcr die Erstellung des Strings so lange hinaus, bis es wirklich zu einer NullPointerException kommt, denn erst dann ist die Meldung n\u00f6tig.<\/li>\n<li>static &lt;T&gt; T requireNonNullElse(T obj, T defaultObj)<br \/>\nLiefert das erste Objekte, was nicht null defaultObj nicht null sein darf, sonst folgt eine NullPointerException. Implementiert als return (obj != null) ? obj : requireNonNull(defaultObj, &#8222;defaultObj&#8220;); Neu in Java 9.<\/li>\n<li>static &lt;T&gt; T requireNonNullElseGet(T obj, Supplier&lt;? extends T&gt; supplier)<br \/>\nLiefert das erste Objekt, was nicht null Ist obj gleich null, holt sich die Mehode die Referenz aus dem Supplier, der dann kein null liefern darf, sonst folgt eine NullPointerException. Neu in Java 9.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Traditionell gilt es, null als Argument und in den R\u00fcckgaben zu vermeiden. Es ist daher gut, als Erstes in einem Methodenrumpf zu testen, ob die Argumente ungleich null sind \u2013 es sei denn, das ist unbedingt gew\u00fcnscht. F\u00fcr diese Tests, dass Referenzen ungleich null sind, bietet Objects ein paar requireNonNullXXX(\u2026)-Methoden, die null-Pr\u00fcfungen \u00fcbernehmen und im [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[85],"tags":[],"class_list":["post-3718","post","type-post","status-publish","format-standard","hentry","category-java-9"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3718","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3718"}],"version-history":[{"count":3,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3718\/revisions"}],"predecessor-version":[{"id":3721,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3718\/revisions\/3721"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3718"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}