2016-05-19 18 views
2

Ich habe eine Liste von OutputStream zu behandeln, und ich weiß, wenn ich nur einen braucht, kann ich sicherstellen, dass es geschlossen try-with-resources Muster verwenden, wie:Wie schließe ich eine Liste von OutputStream in Java?

try(OutputStream os = new ByteArrayOutputStream()) { 
    do something... 
} catch (IOException e) { 
    do something... 
} 

Aber was, wenn es eine Liste von ihnen ? Kann ich einfach die Liste (ArrayList oder normales Array) in die Klammern hinter try setzen?

+0

Es gibt keine explizite Unterstützung für 'List' in Try-with-Resource-Anweisungen. Wenn Sie die 'try (...) {...}' -Syntax wirklich verwenden möchten, müssen Sie Ihr eigenes 'AutoCloseable' rollen, das eine Liste von' AutoCloseables' enthält. Etwas wie [dies] (http://pastebin.com/8MtLFLu2) könnte funktionieren. – aioobe

Antwort

2

Sie könnten den foreach (oder den Standard for) für diesen Zweck verwenden.

OutputStream[] streams = {...}; 

for (OutputStream stream : streams) { 
    try (OutputStream os = stream) {} 
    catch (IOException e) {} 
} 

Sie können nicht „setzen ArrayList oder normales Array in den Klammern nach try, weil es nur mit Objekten arbeiten können, die die Schnittstelle java.lang.AutoCloseable implementieren.

+0

Je nach Anwendungsfall vielleicht etwas Sehend, wenn das Schließen fehlschlägt –