Я спросил this question yesterday. Думаю, у меня есть правильный ответ, но один из других ответов оставил мне вопрос. Если у меня есть такой код:Является ли сканер Java закрытым?
File file = new File("somefile.txt");
try (Scanner in = new Scanner(file)) {
//do something but don't explicitly call file.close()
}
Является ли это так? Из того, что я понимаю try-with-resources заявление закроет ресурс, если этот ресурс реализует Closeable или AutoCloseable. На мой взгляд, я приравниваю это к использованию с оператором для открытия файловых ресурсов в Python. Но ответ от @David Newcomb говорит, что сканер не Closeable.
Я смотрел на источник Java, и я нашел строчку:
public final class Scanner implements Iterator<String>, Closeable {
Это значит для меня, что я в безопасности с помощью примерочных с-ресурсами и что файл ресурсов будет закрыт в конце блока try без явного вызова file.close(). Я прав, или я должен делать что-то по-другому?
В Java есть эта замечательная вещь, о которой рассказывал javadoc, в котором рассказывается, какие интерфейсы каждый класс реализует: http://docs.oracle.com/javase/6/docs/api/ –
Это не «замечательная вещь» или ответьте на мой вопрос. Также интересно отметить, хотя, поскольку вы указали, что, согласно javadoc, java6 Scanner не реализует Closeable, но Java7 делает. – noel
Вы спрашиваете, хотите ли вы вызвать файл file.close(). Посмотрите на javadoc файла, и вы увидите, что он не имеет никакого метода clsoe() и не реализует Closeable. Посмотрите на javadoc сканера, и вы увидите, что он реализует Closeable. –