0

Wie kann ich in Ausnahme in Java fange ParameterFang Ausnahme in Java-Parameter

Nur ein Beispiel, in Code wie diese

MyClass obj = null; 
logger.info("the field is " + obj.field); 

eine Null-Zeiger-Ausnahme ausgelöst. Gibt es eine Möglichkeit, dies automatisch zu tun:

MyClass obj = null; 
try { 
    logger.info("the field is " + obj.field); 
} catch(Exception e) {} 

Vielleicht mit Spring AOP, Anmerkungen, etc?

Edit: Ich möchte etwas, das jede Ausnahme fangen wird, so dass ich nie eine Ausnahme aus einer Codezeile geworfen, die versucht, zu protokollieren.

+2

Wird die Ausnahme stillschweigend konsumiert, was Sie wirklich wollen? Warum nicht etwas wie 'logger.info (" das Feld ist "+ obj == null?" Null ": obj.field);'? – azurefrog

+0

können Sie nicht, und AOP wird hier keine Hilfe sein. Wie wäre es, eine toString-Implementierung in Ihrer Klasse mit allen benötigten Informationen zu erstellen und nur Ihre Referenz an die Zeichenfolge anzuhängen? Auf diese Weise müssen Sie sich nicht um die Nichtigkeit kümmern (wenn null angezeigt wird, wird die Zeichenfolge "null" angezeigt) – spi

+0

ich möchte den Code immun gegen jede Ausnahme in den Parametern machen (so dass die Protokollierung uns nicht zum Absturz bringen kann). dieser ist nur ein Beispiel – OneSolitaryNoob

Antwort

0

Nein, gibt es nicht. Und du solltest deinen Code nicht in try catch einpacken. Dadurch können Sie einige Laufzeitausnahmen vermeiden, aber auch echte Code-Probleme verbergen. Sie könnten die Null Object pattern verwenden. Sie erstellen eine Markierungsklasse mit leeren Feldern, und wenn ein Wert in Ihrem Code null sein sollte, weisen Sie ihn einer Instanz dieser Markierungsklasse zu. Das sollte für Code unter Ihrer Kontrolle funktionieren, aber es garantiert nicht, dass Bibliotheken von Drittanbietern NPE nicht werfen.

Edit: Ich möchte etwas, das jede Ausnahme fangen wird, so dass ich nie eine Ausnahme aus einer Codezeile geworfen, die versucht, zu protokollieren.

Das kann nie erreicht werden. Was Sie im Wesentlichen fragen, ist ein Versuch catch Block am Anfang bis Ende der Hauptmethode. Auch wenn Sie immer noch Ausnahmen von anderen Threads erhalten können, z. B.

+0

Danke, wir wollen alle Ausnahmen erfassen, nicht nur NPEs. – OneSolitaryNoob

+0

haben wir einen Präprozessor verwendet – OneSolitaryNoob