2015-11-13 4 views
11

Betrachten Sie den folgenden Try-with-Ressourcen-Block:Mögliche Null-Zeiger-Ausnahme auf autocloseable Idiom

try (Foo foo = getAFoo()) { 

} 

Für einig Klasse Foo der java.lang.AutoCloseable implementiert.

Wenn getAFoo() waren null zurückzukehren, würde dann eine Null-Zeiger-Ausnahme auf der schließenden Klammer geworfen werden (aufgrund der Laufzeit versucht close zu nennen)?

Antwort

9

Nach this Oracle blog:

Nach gebührender Berücksichtigung der JSR 334 Expertengruppe der Semantik der Try-with-Ressourcen-Anweisung auf einer Null-Ressource geändert werden soll, entschieden hat, wie folgt: die Compiler generierten Anrufe Schließen einer Ressource wird nur auftreten, wenn die Ressource nicht null ist. Diese

bedeutet, dass Sie schließen jede null Ressource in einem try (mit Ressourcen) Block, ohne einen Fehler zu werfen (und das gleiche, wenn das Programm automatisch versucht, die Ressource zu schließen, wenn die try Ende).

0

Sie implementieren java.lang.AutoCloseable, damit der Compiler versuchen wird, die Ressource zu schließen, wenn er ausgeführt wird. Der Prozess zum Schließen einer Ressource wird jedoch nur ausgeführt, wenn die Ressource non-null ist. Also in diesem Fall denke ich, dass keine Ausnahme geworfen wird.