Какова новая концепция Autocloseable в блоке try в JDK 1.7

Какова новая концепция Autocloseable в блоке try в JDK 1.7. Это действительно необходимо или просто улучшить что-то в блоке try catch, чтобы сделать его более продвинутым.

3 ответа

Решение

Прочитайте документацию о функции пробного использования ресурсов, представленной в Java 7.

try оператор -with-resources является оператором try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализует java.lang.AutoCloseable , который включает в себя все объекты, которые реализуют java.io.Closeable , может быть использован в качестве ресурса.

И Javadoc AutoCloseable#close():

Закрывает этот ресурс, отказываясь от любых базовых ресурсов. Этот метод вызывается автоматически для объектов, управляемых try с заявлением ресурсов.

Это означает, что вы можете создавать свои собственные подтипы AutoCloseable ресурсы и использовать их в этом заявлении.

Это позволяет использовать try-with-resources которая является новой функцией от Java 7.

Старая школа:

InputStream is = null;
try {
    is = ...;
    // do stuff with is...
} catch (IOException e) {
    // handle exception
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (IOException innerE) {
            // Handle exception
        }
    }
}

Новая школа:

try (InputStream is = ...) {
    // do stuff with is...
} catch (IOException e) {
    // handle exception
}

AutoCloseable объекты могут быть открыты в tryблок (в пределах ()) и будет автоматически закрыт вместо использования finally блок как в примере кода выше.

Из документов Oracle:

Оператор try-with-resources является оператором try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализует java.lang.AutoCloseable, который включает все объекты, которые реализуют java.io.Closeable, может использоваться в качестве ресурса.

Итак, это означает, что все объекты, которые AutoCloseable может быть использован таким образом, что означает, что, например, ResultSet и другие ресурсы могут быть использованы способом "попробуй с ресурсами". ИМО, это упрощает кодирование и удобочитаемость.

Тем не менее, читаемость не является убийственным аргументом о том, почему использовать новый способ. Я считаю, что это простой факт, что ресурсыавтоматически закрыты. При использовании до Java 7 можно было забыть делать нулевые проверки или закрывать базовый ресурс - попытка с ресурсами просто менее подвержена ошибкам.

Но с этим сказал. Не обязательно использовать try-with-resources, все еще возможно использовать его старой школой, хотя я бы не рекомендовал его из-за (так как он является как многословным, так и подверженным ошибкам).

try (BufferedReader br = new BufferedReader(new InputStreamReader)) {
    // try block
} catch (IOException e) {
    // No need to close resourse. Only handle exception. Resource will be closed automatically
}

Есть много классов, которые доступны в Java, который реализует Autoclosable.

Ниже ссылки представлен список классов, реализующих этот интерфейс.

http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html

Другие вопросы по тегам