- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
package java.nio.file;
public final class Files {
/**
* Convert a Closeable to a Runnable by converting checked IOException
* to UncheckedIOException
*/
private static Runnable asUncheckedRunnable(Closeable c) {
return () -> {
try {
c.close();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
};
}
}
там даже в том же Files проверка существования узлов в файловой системе как-то так делается
Зачем? Зачем? Чтобы закидывать закрывашку в тредпул?
если закрывающий хендлер работает с ИО, но ему запрещено кидать ИОЭкцепцен - это хуевый апи.
тем более что можно в любой другой эксепшен напихать suppressed, если мы волнуемся за то, что закрыть его надо потому что операция провалилась из-за какого-то другого исключения
Согласен, что это тянется из ванильной джавы и ее ебанутого дизайна исключений, но конкретно этот код не говно
А всё из-за того, что нарушили SRP и смешали flush и close в одной функции.
Типа программистам удобно что последний кусок автоматически флашится при закрытии, а не проёбывается. А на самом деле кучу гемора создали. Легче было бы flush() звать в успешной ветке, чем думать как же обработать ошибку от close().
З.Ы. С другой стороны, я и сам могу позвать flush(), а потом забить на ошибку close(). Но гарантий насчёт этого нету.
И это реальный залёт на разрушение данных.