explizit NullPointerException werfen

Status
Nicht offen für weitere Antworten.

diggaa1984

Top Contributor
hallo,

ich hab grad folgendes eingebaut:
[HIGHLIGHT="Java"]
//m und v sind strings
if ((m == null) || (v == null))
throw new NullPointerException();[/HIGHLIGHT]

und mich im gleichen Moment gefragt ob es überhaupt Sinn macht jemals NPE's selbst zu werfen, denn schliesslich sorgt die Verarbeitung der Variablen ja schon dafür das einem NPE's um die Ohren fliegen wenn was nicht stimmt. Warum sollte ich also selbst noch eine werfen, wenn bei der erst-besten String-Operation eh eine geworfen wird ???:L Wenn auf etwas Verlass ist, dann auf diese Expception ;)
 

tfa

Top Contributor
Ja, das kannst du dir schenken, wenn in der selben Methode noch auf die Objekte zugriffen wird und die Exception automatisch fliegt. Falls nicht, muss man eben nachhelfen und sie selbst werfen.
 
M

maki

Gast
NPE kann und soll man selber werfen, allerdings (wie alle Exeptions) mit einer aussagekräftigen Message.
Ausserdem sollten alle Exceptions die eine Methode werfen kann in der JavaDoc dazu dokumentiert sein.
 

diggaa1984

Top Contributor
Ja, das kannst du dir schenken, wenn in der selben Methode noch auf die Objekte zugriffen wird und die Exception automatisch fliegt. Falls nicht, muss man eben nachhelfen und sie selbst werfen.
hm ob es einen nun in der Methode raushaut oder eine später, macht ja kaum nen Unterschied, aber man kann natürlich dem Nutzer der Klasse zu liebe das ganze an der Wurzel ausgeben und nich 3 Stellen später. Ist das die Intention?

Kannst z.B. ein aussagekräftiges Kommentar mitgeben

in meinen augen der einzig brauchbare grund :)

konkret sieht das grad mal so aus:
[HIGHLIGHT="Java"]#
public void addRule(String m, String v) throws BadGrammarException {
if ((m == null) || (v == null))
throw new NullPointerException();

if (m.equals(v))
throw new BadGrammarException("The rule: " + m + " = " + v + "does not hold the " +
"specification for CNF-notation.");

v = v.trim();
extractTerminal(v);
addNonTerminal(m);

rules.get(m).set(0, v);
}//addRule[/HIGHLIGHT]
 
Zuletzt bearbeitet:

tfa

Top Contributor
Ich find bei NPEx eine Message ziemlich überflüssig. Was kann schon groß passiert sein? Irgendeine Referenz war null. Datei und Zeilennummer steht im Stacktrace. Zur Not gibt es Debugger und Breakpoints.

hm ob es einen nun in der Methode raushaut oder eine später, macht ja kaum nen Unterschied, aber man kann natürlich dem Nutzer der Klasse zu liebe das ganze an der Wurzel ausgeben und nich 3 Stellen später. Ist das die Intention?
Exceptions sollten so früh wie möglich fliegen. Das macht die Fehlersuche einfacher.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Ich find bei NPEx eine Message ziemlich überflüssig. Was kann schon groß passiert sein? Irgendeine Referenz war null. Datei und Zeilennummer steht im Stacktrace. Zur Not gibt es Debugger und Breakpoints.
Ich finde das überhaupt nicht überflüssig, man sollte eine NullPointerException mit einem Text wie "kein Parameter darf null sein" werfen. Denn, wird eine NPE ohne Text geworfen, gehe ich davon aus, dass dies ein Programmierfehler in dieser Methode ist.
 
M

maki

Gast
NPEs deuten eigentlich immer auf einen Programmierfehler.

Die NPE an sich & die Message sind imho bessere Mittel zur Fehlersuche als der Debugger ;)
Aber wie bereits gesagt, unbedingt in die JavaDoc aufnehmen.
 

tfa

Top Contributor
Freifliegende NPEx sind sowieso Programmierfehler, ob nun in der aufgerufenen oder aufrufenden Methode...

Parameterchecks kann man einfacher mit asserts machen.
 
S

SlaterB

Gast
nie NullPointerException selber werfen,
wenn nicht assert, dann IllegalArgumentException oder sonst was sinnvolles, NullPointerException ist reserviert

Ich finde das überhaupt nicht überflüssig, man sollte eine NullPointerException mit einem Text wie "kein Parameter darf null sein" werfen.
-> IllegalArgumentException
Denn, wird eine NPE ohne Text geworfen, gehe ich davon aus, dass dies ein Programmierfehler in dieser Methode ist.

JEDE NPE sollte so sein bzw. KEINE mit Text
 
M

maki

Gast
>> Parameterchecks kann man einfacher mit asserts machen.

Soll man aber nicht ;)

Einmal sind sie nicht so aussagekräftig weil immer nur derselbe AssertError geworfen wird, dann ist es nicht sicher ob asserts überhaupt aktiviert sind.
 

tfa

Top Contributor
Okay, assertions lieber doch nur für Vor- und Nachbedingungen (obwohl man Parametergültigkeit auch als Vorbedingung ansehen kann). Es kommt wohl auch darauf an, ob man sie in einer wiederverwendbaren Library einbaut, oder in einem geschlossenen Modul, das man vollständig durchtesten kann.
 
M

maki

Gast
Assertions sind imho eher etwas für Unittests, nämliuch die assertXXX Methoden, diese können auch nicht abgeschaltet werden wie die Standard Java Asserts.

Diese mögliche abschalten der Asserts macht sie imho unzuverlässig.
 
S

SlaterB

Gast
man könnte da bisschen unterscheiden zwischen reinen Programmier-Checks und Test auf User-Eingaben, DB-Results usw.,
letztere können und sollen auch zur Laufzeit aktiv werden und fachliche Fehler prüfen,

erstere dienen nur zur Absicherung in der Programmierphase, um tatsächlich eher inhaltslose NullPointerException zu ersetzen,
wenn diese fehlen, dann dürfte das Programm trotzdem eine Exception werfen
 

Ebenius

Top Contributor
Parameterchecks kann man einfacher mit asserts machen.
:mad: Nein! Hilfe! Parameterchecks in privaten Methoden kann man mit asserts machen. In einer von außen sichtbaren Schnittstelle haben asserts zur Parameterprüfung nichts verloren! Erstens sind sie (pro package oder insgesamt) abschaltbar, im Standardfall sind sie nichtmal eingeschaltet und zweitens werfen asserts keine Exceptions sondern Errors und damit ist es mehr oder minder verboten die Fehler sinnvoll zu behandeln. Siehe Sun Guide: Programming with Assertins.

Um Parameter zu überprüfen sollte man übrigens stets NullPointerException ggü. IllegalArgumentException abwägen. Meist gewinnt letztere. Faustregel: Wenn aus der Methode vollkommen einwandfrei ersichtlich ist, dass die Methode mit null-Argument keinen Sinn ergibt, so kann man bei null eine NullPointerException werfen. In jedem anderen Fall sollte man sich für IllegalArgumentException entscheiden.

Und nun noch zur eigentlichen Frage des Themas: Die NullPointerExceptions selbst zu werfen hat dann Sinn, wenn die NullPointerException ohnehin auftreten würde, vorher aber schon Dinge passiert sein würden die man rückgängig machen müsste. Beispiel: [HIGHLIGHT="Java"]void sendMeYourQuote(QuotationReceiver recv) {
// throw NPE here, as our state would change and a quotation would
// be created and calculated before NPE would be thrown
if (recv == null) {
throw new NullPointerException("recv is null");
}

final ProjectDetails pd = requestProjectDetails();
final Quotation quote = createQuotation(pd);
recv.receiveQuote(quote); // NPE would be thrown AFTER calculation
}[/HIGHLIGHT]
Ebenius
 
Zuletzt bearbeitet:

schalentier

Gesperrter Benutzer
Bei uns sieht das in etwa so aus:

Code:
void sendMeYourQuote(QuotationReceiver recv) {
   if( isNotNull( recv ) ) {
      // ...
   } else {
      handleUnexpectedNull( "recv" );
   }
}

Das ganze kann man z.B. als Live Template (ka wie die Dinge in Eclipse heissen) speichern, dann reicht "inn" + Tab und obiger Code steht da.

Was handleUnexpectedNull genau macht, ist dann frei definiertbar. Z.B. ne NPE schmeissen (schlecht IMHO), IllegalArgumentException, auf Console schreiben, ins Logfile schreiben, etc.
 

faetzminator

Gesperrter Benutzer
ich finde diese if() { } else { } Verschachtelungen in einem solchen Fall schrecklich, wie wärs mit
Code:
void sendMeYourQuote(QuotationReceiver recv) {
   if(isNull(recv)) {
      handleUnexpectedNull( "recv" );
      return;
   }
   // ...
}
 

schalentier

Gesperrter Benutzer
Das wiederum finde ich schrecklich, da Methoden so mehrere "Exitpoints" haben. Aber is wohl Geschmackssache.
 

Ebenius

Top Contributor
ich finde diese if() { } else { } Verschachtelungen in einem solchen Fall schrecklich, wie wärs mit
Code:
void sendMeYourQuote(QuotationReceiver recv) {
   if(isNull(recv)) {
      handleUnexpectedNull( "recv" );
      return;
   }
   // ...
}
Das finde ich wiederum grausam, weil es dem caller das Problem vorenthält. Der callee kann doch gar nicht wissen, wie der Fehler behandelt werden muss und genau darum geht es ja.

Ebenius
 

faetzminator

Gesperrter Benutzer
Ich ging davon aus, dass in handleUnexpectedNull() z.B. etwas geloggt und dann eine NullPointer geworfen wird --> das return; falls nichts geworfen wird...
 

tfa

Top Contributor
ich finde diese if() { } else { } Verschachtelungen in einem solchen Fall schrecklich, wie wärs mit [returns]
Das ist beides schrecklich. Exceptions sollen doch gerade dabei helfen, diese Unübersichtlichkeiten zu vermeiden.

Ich würde es so einfach so lösen:
[HIGHLIGHT="Java"]
/**
* Mache irgendwas.
* @param m das m (darf nicht null sein)
* @param v das v (darf nicht null sein)
* @throws NullPointerException wenn m oder v null sind
* @throws BadGrammarException wenn sonstwas falsch läuft...
*/
public void addRule(String m, String v) {
v = v.trim();
if (m.equals(v))
throw new BadGrammarException("The rule: " + m + " = " + v + "does not hold the " +
"specification for CNF-notation.");


extractTerminal(v);
addNonTerminal(m);

rules.get(m).set(0, v);
}[/HIGHLIGHT]
Das ist aber keine 1 zu 1 Umsetzung des Quellcodes aus Beitrag #5. Hier wird zuerst auf v getestet und es erst dann getrimmt. Möglicherweise ein Problem.
 
Zuletzt bearbeitet:
M

maki

Gast
Wenn die Prüfung der Paramter soviel Platz einnimmt/Umfangreich/Komplex ist, dann darf man sie auch ruhig in eine eigene Klasse auslagern.
 

diggaa1984

Top Contributor
ja da smit dem trim sollte ich vor das equals ziehen ^^

@maki ist das auf mein code bezogen!? .. respektive tfa's?
 
M

maki

Gast
Das war nicht auf irgendeinen code bezogen, sondern nur allgemeines blabla ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
B Cast explizit verbieten Java Basics - Anfänger-Themen 10
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
Q NullPointerException Java Basics - Anfänger-Themen 5
H NullPointerException Java Basics - Anfänger-Themen 5
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Array wird nicht übernommen NullPointerException Java Basics - Anfänger-Themen 6
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben