2011-07-13 28 views
5

Trong cú pháp Try-with-Resources mới trong Java 7, tôi có cần phải lo lắng về thứ tự các tài nguyên không?Thử-với-tài nguyên trong 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". 
} 
+1

Nếu tài nguyên phụ thuộc * mỗi khác *, có (tốt, "có thể" tùy thuộc vào về cách họ làm). Nếu không ... không. –

Trả lời

7

Đặt hàng có vấn đề khi và chỉ khi sử dụng cú pháp thử {create resources} bình thường {close resources} bình thường. Các tài nguyên được mua trước sẽ được đóng lại sau cùng. Xem the technotes để biết chi tiết.

0

Thực tế, trật tự không quan trọng chút nào. Lý tưởng nhất là nếu các tài nguyên không liên quan, bạn có thể mở chúng theo bất kỳ thứ tự nào và chúng có thể được đóng theo bất kỳ thứ tự nào.

Nếu tài nguyên có liên quan, bạn phải làm theo thứ tự để tạo chúng, ví dụ đầu tiên tạo kết nối và sau đó PreparedStatement, tôi không có bất kỳ bằng chứng nhưng tôi nghĩ java đóng tài nguyên trong FIFO để tránh bất kỳ vấn đề phụ thuộc.

0

Điều quan trọng là việc mở tài nguyên phụ thuộc vào tài nguyên khác đang được mở. Ví dụ, nếu việc mở B yêu cầu A được mở ra, bạn sẽ rõ ràng muốn A mở đầu tiên. Một điều khác cần chú ý là tài nguyên được đóng theo thứ tự ngược lại chúng được mở ra. Ví dụ, nếu bạn mở A và sau đó B, sau đó khi try-with-resources đóng chúng, B được đóng trước tiên theo sau là A.