2017-03-21 13 views
6

Trong Eclipse Neon, nếu tôi viết mã này Java:Tại sao Eclipse không hiển thị cảnh báo rò rỉ cho luồng?

Stream<Object> stream = Stream.builder().build(); 

tôi nhận được không có cảnh báo rò rỉ, nhưng nếu tôi thực hiện Stream, chẳng hạn như

public class MyStream<T> implements Stream<T> { 
    // implementation 
} 

và tôi viết mã tương tự

Stream<Object> stream = new MyStream<>(); 

Tôi nhận được cảnh báo Resource leak: 'stream' is never closed. Điều này chỉ xảy ra trong Eclipse, trong khi biên dịch với javac không đưa ra bất kỳ cảnh báo nào.

Lưu ý Tôi không tìm câu trả lời về cách đóng luồng và như vậy, nhưng đối với câu trả lời giải thích lý do hành vi khác nhau này cho cùng một giao diện.

Trả lời

3

Trong trường hợp đầu tiên bạn không tạo cá thể tài nguyên. Trong trường hợp thứ hai, bạn đang có.

Các eclipse documentation states the following:

sở hữu/trách nhiệm
Các chẩn đoán trên cơ bản cho rằng một phương pháp tạo ra một thể hiện của một loại tài nguyên cũng là trách nhiệm đóng khu vực này. [...]
- Nếu phương thức nhận được tài nguyên qua cuộc gọi phương thức thay vì bằng một biểu thức mới, nó có thể hoặc không thể chịu trách nhiệm; bất kỳ vấn đề nào là chỉ được gắn cờ là rò rỉ tài nguyên tiềm năng.

4

Eclipse có danh sách trắng các loại không yêu cầu dọn dẹp, vì chúng không thực sự tham chiếu đến tài nguyên hệ thống. Các loại Java lõi được liệt kê ở đây, nhưng các loại tùy chỉnh của bạn thì không. Xem the help để biết thêm thông tin.

Các vấn đề liên quan