Попробовать с ресурсами в Java 7? - PullRequest
5 голосов
/ 13 июля 2011

В новом синтаксисе Try-with-Resources в Java 7 мне нужно беспокоиться о порядке ресурсов?

try (InputStream in = loadInput(...); // <--- can these be in any order?
     OutputStream out = createOutput(...) ){
    copy(in, out);
}
catch (Exception e) {
    // Problem reading and writing streams.
    // Or problem opening one of them.
    // If compound error closing streams occurs, it will be recorded on this exception 
    // as a "suppressedException".
} 

Ответы [ 4 ]

7 голосов
/ 13 июля 2011

Порядок имеет значение тогда и только тогда, когда это имеет значение при использовании обычного синтаксиса try {create resources} finally {close resources}.Ресурсы, которые были приобретены первыми, будут закрыты последними.Подробнее см. в технических примечаниях .

1 голос
/ 02 февраля 2019

В вашем примере, порядок определенно не имеет значения.Вы используете только ресурсы в блоке try, где оба уже доступны.Если вы будете подключаться к базе данных, порядок или открытые вопросы, но я бы создал отдельный метод, чтобы покрыть это.Этот метод должен реализовать AutoClosable и переопределить метод close ().Хотя close () выдает исключение, ваш метод не обязан.

0 голосов
/ 25 ноября 2012

Имеет значение, если открытие ресурса зависит от открытия другого ресурса.Например, если открытие B требует открытия A, вы, очевидно, хотите, чтобы A открылся первым.Еще одна вещь, на которую следует обратить внимание, это то, что ресурсы закрываются в обратном порядке их открытия.Например, если вы открываете A, а затем B, то когда try-with-resources закрывает их, B сначала закрывается, а затем A.

0 голосов
/ 06 ноября 2012

На самом деле порядок не имеет значения вообще.В идеале, если ресурсы не связаны, вы можете открывать их в любом порядке, а их можно закрывать в любом порядке.

Если ресурсы связаны, вы ДОЛЖНЫ следовать порядку их создания, например сначала создатьСоединение, а затем PreparedStatement, у меня нет никаких доказательств, но я думаю, что Java закрывает ресурсы в FIFO, чтобы избежать проблем с зависимостями.

...