Was ist der beste Weg, um Try-with-Ressourcen in Java 6 zu emulieren?

9

Es stellt sich heraus, dass fast niemand Ressourcen in Java korrekt schließt. Programmierer verwenden entweder try-finally block überhaupt nicht oder setzen einfach resource.close() in finally , was auch falsch ist (weil Throwable von close() kann Throwable von try blockieren). Manchmal setzen sie etwas wie IOUtils.closeQuietly() mit nur für InputStream , aber nicht für OutputStream . try-with-resources löst alle diese Probleme, aber es gibt immer noch eine große Anzahl von Projekten in Java 6 geschrieben.

Was ist der beste Weg, try-with-resources in Java 6 zu emulieren? Jetzt benutze ich Guava Closer , was besser ist als nichts, aber immer noch hässlicher als try-with-resources . Es gibt auch ein Muster, das als Kreditmuster bezeichnet wird, aber das Fehlen von Lambdas in Java macht dieses Muster sehr schwerfällig. Gibt es einen besseren Weg?

    
ZhekaKozlov 21.10.2013, 14:41
quelle

3 Antworten

3

Ich habe einen guten Ersatz für try-with-resources gefunden. Es verwendet Lombok Bibliothek mit Annotationsverarbeitung:

%Vor%

Allerdings wird die Ausnahme nicht korrekt behandelt. Dieser Fehler ist mehr als 1 Jahr alt und immer noch nicht geschlossen: Ссылка

    
ZhekaKozlov 24.10.2013, 11:50
quelle
0

Wenn Ihr einziges Problem mit IOUtils.closeQuietly darin besteht, Ausnahmen in OutputStreams zu ignorieren, können Sie einfach close() für sie aufrufen oder eine eigene Utility-Klasse erstellen, die die beiden automatisch unterschiedlich behandelt:

%Vor%

Die korrekte überladene Methode wird zur Kompilierzeit in allen gängigen Situationen ausgewählt. Wenn Sie jedoch OutputStream s als Closeable s übergeben, müssen Sie dies ändern, um eine dynamische instanceof Prüfung durchzuführen um sicherzustellen, dass OutputStream s immer Ausnahmen auslöst.

    
MikeFHay 21.10.2013 15:07
quelle
0

Obwohl die anonyme Klasse ziemlich ausführlich ist, ist sie im Java-Land immer noch akzeptabel.

%Vor%     
ZhongYu 21.10.2013 15:04
quelle

Tags und Links