Suplement do Suppliera
Na ostatnim spotkaniu wrocławskiego JUGa padło pytanie co do Suppliera z poprzedniego wpisu dotyczące tego jak należy zamykać BufferedReader. Trochę się niestety zamotałem i nie byłem wstanie udzielić dobrej odpowiedzi na to pytanie, ale po spokojnym przemyśleniu sprawy rzecz jest bardziej niż prosta.
Błogosławione niech będą rzeczy nowe w Javie 7
Dokładnie zaś konstrukcja try-with-resource, czyli możliwość trochę lepszego zapisu syfu związanego z zamykaniem zasobów. Efektywnie oznacza to, że wystarczy by nasz Supplier implementował interfejs Closeable:
Listing 1. Samo zamykający się Supplier
public class FileReaderViaSupplier implements Supplier<Optional<String>>, Closeable {
private BufferedReader reader;
public FileReaderViaSupplier(String filePath) {
this(new File(checkNotNull(filePath)), UTF_8);
}
public FileReaderViaSupplier(File file, Charset charset) {
checkNotNull(file);
checkNotNull(charset);
checkArgument(file.exists(), "File %s does not exist", file.getAbsolutePath());
try {
reader = Files.asCharSource(file, charset).openBufferedStream();
} catch (IOException e) {
checkState(false, e.getMessage());
}
}
@Override
public Optional<String> get() {
try {
String reference = reader.readLine();
return Optional.fromNullable(reference);
} catch (IOException e) {
return Optional.absent();
}
}
@Override
public void close() throws IOException {
reader.close();
}
}
I to tyle.
Tradycyjnie już na koniec mała prośba jeżeli spodobał ci się ten wpis udostępnij go w mediach społecznościowych korzystając z przycisków poniżej. Jak masz pytania zadaj je w komentarzu. Postaram się zaspokoić twoją ciekawość.