Tôi dự kiến sẽ tìm thấy XMLStreamReader
là AutoCloseable
trong Java 7. Tuy nhiên, đó không phải là trường hợp. Có lý do kỹ thuật nào khiến giao diện người đọc/ghi STAX không (hoặc không nên) trang bị thêm để triển khai AutoCloseable
? Họ đã có các phương pháp đóng, có ý định không khác với phương pháp đóng của AutoCloseable
.Tại sao các lớp học StAX không được trang bị thêm cho ARM trong Java 7
Trả lời
Nếu bạn nhìn gần gũi hơn với các close()
method of AutoCloseable
:
Đóng cập khu vực này, từ bỏ bất kỳ tài nguyên cơ bản. Phương thức này được gọi tự động trên các đối tượng được quản lý bởi câu lệnh try-with-resources.
Hoặc thậm chí Closeable
close()
method:
Đóng dòng này và phiên bản bất kỳ tài nguyên hệ thống liên kết với nó. Nếu luồng đã được đóng thì việc gọi phương thức này không có hiệu lực.
Trong khi close()
method of XMLStreamReader
nói:
Giải phóng bất kỳ tài nguyên liên quan đến đọc này. Phương pháp này không đóng nguồn đầu vào cơ bản.
Thật vậy, nguồn đầu vào được quản lý bởi Reader
triển khai giao diện Closeable
. Vì vậy, đó là người đọc có thể đóng trong số try-with-ressource.
Ví dụ:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = null;
try (FileReader fr = new FileReader("file.xml")) { //Will close the FileReader
reader = factory.createXMLStreamReader(fr);
reader.close();
}
catch (XMLStreamException ex) {
if(reader!=null)try {
reader.close();
} catch (XMLStreamException ex1) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex1);
}
}
Không có lý do kỹ thuật tại sao họ không thể làm những điều này AutoCloseable
. Tôi tìm nó chỉ đi xuống để lười biếng hoặc không đủ thời gian tìm kiếm các phương pháp gọi là close().
- 1. Tại sao lớp học của tôi không được chấp nhận
- 2. Tại sao bạn nên ngăn lớp học bị phân lớp?
- 3. Những thay đổi trong việc tiếp cận các biến cho các lớp học chung trong Java 7
- 4. Tại sao một lớp học không thể được tải xuống mà không dỡ bộ nạp lớp?
- 5. Tại sao Eclipse không cập nhật các lớp học?
- 6. Singleton - Tại sao nên sử dụng các lớp học?
- 7. Tại sao java.io.Serializable không được chấp nhận trong Java 5?
- 8. Học lắp ráp ARM
- 9. Thêm phương thức đảm bảo cho lớp hiện tại (Loại trừ diễn viên lớp học)
- 10. Tại sao String là một lớp học?
- 11. Tại sao một lớp học được gọi là "được gọi" khi không được bắt đầu? - Python
- 12. Tại sao không có ARM trong Scala stdlib?
- 13. Phụ thuộc thông tư trong các lớp học java
- 14. Tại sao tôi không thể sử dụng nội trang cho các lớp quá tải subref?
- 15. thêm lớp học cho trẻ em này
- 16. jQuery thêm lớp học dựa trên URL trang
- 17. Tại sao chỉ thị bạn bè bị thiếu trong Java?
- 18. Chuyển đổi một Nguồn Stax trong Java
- 19. Tại sao Scala có các lớp học khi nó đã có các đặc điểm?
- 20. tại sao __getitem__ không thể là lớp học?
- 21. Tôi không biết tại sao lớp học của mình không thể được tuần tự hóa
- 22. Tại sao các phương pháp tĩnh cần được đưa vào lớp học?
- 23. Tại sao phiên bản không phải là const được chọn trong phiên bản const cho lớp học?
- 24. Tại sao Java không cho phép các lớp con chung của Throwable?
- 25. Tại sao các chuyên môn về mẫu chức năng không được phép bên trong một lớp học?
- 26. Tại sao lớp học này có hai nhà thầu?
- 27. lớp học một phần java
- 28. động thêm các phương pháp lớp học để một lớp
- 29. Java - Tự động tải các lớp học
- 30. Tại sao các lớp học có xu hướng được định nghĩa là giao diện hiện nay?
Tôi sẽ tự cấu trúc lại mã đó. reader.close() phải ở trong một khối cuối cùng trong trường hợp ngoại lệ xảy ra (bắt của bạn chỉ dành cho XMLStreamException nhưng nó có thể ném một ngoại lệ không được kiểm soát.) Tôi cũng sẽ loại bỏ kiểm tra cho người đọc là rỗng và đơn giản là làm tổ cấp thứ hai cố gắng cuối cùng bên trong khối thử khác. – Trejkaz