2015-05-26 15 views
6

Tôi tạo ra một lớp Counter đơn giản:Nội dung của Bộ sưu tập không bao giờ được cập nhật trong Intellij IDEA

public class Counter<T> extends HashMap<T, Long> { 
    public Counter() { 
    } 

    public void increase(T key) { 
     put(key, getOrDefault(key, 0l) + 1); 
    } 
} 

Trong mã của tôi, tôi gọi phương thức tăng() và sau đó sử dụng phương pháp Map để truy cập dữ liệu, ví dụ

Counter<Integer> counter = new Counter<>(); 
    for (Integer i: ... some collection ...) 
     counter.increase(i); 

Intellij nhấn mạnh việc kê khai của counter (dòng đầu tiên trong đoạn cuối cùng) với màu sắc cảnh báo, và thông điệp tooltip nói

Nội dung của bộ sưu tập được truy vấn, nhưng không bao giờ được cập nhật.

Rõ ràng tôi chỉ có thể bỏ qua cảnh báo này, nhưng có cách nào để thuyết phục Intellij không có gì sai với mã của tôi không?

Tôi đang sử dụng phiên bản cộng đồng 14.0.2.

+1

vì thông điệp cảnh báo Intellij chỉ định bộ sưu tập, có thể nó đang nói về một số bộ sưu tập khác chứ không phải Bộ đếm (mở rộng Bản đồ không phải là bộ sưu tập ...) –

+0

Cảnh báo là trên biến đó. Xin lỗi, câu hỏi của tôi có thể chưa đủ rõ ràng để bắt đầu. Tôi đã chỉnh sửa với hy vọng nó rõ ràng hơn bây giờ. – daphshez

+0

vậy thì dòng mã được đánh dấu ở đâu? –

Trả lời

6

IntelliJ IDEA không nhận ra rằng phương thức tăng() cập nhật bản đồ, vì nó không phải là một phần của API bản đồ chuẩn. Để loại bỏ cảnh báo, bạn có thể ngăn chặn việc kiểm tra.

Tuy nhiên, thiết kế tốt hơn sẽ là làm cho lớp Counter của bạn gói gọn một HashMap, thay vì mở rộng nó. Điều này sẽ đảm bảo rằng người dùng của lớp của bạn sẽ chỉ gọi các API thích hợp và sẽ không làm hỏng dữ liệu của bạn bằng cách gọi trực tiếp phương thức put() hoặc các phương thức sửa đổi khác.

+0

Cảm ơn lời khuyên. Trong kịch bản của tôi, tôi cảm thấy thoải mái với người dùng có quyền truy cập vào HashMap nếu họ thích, và tôi không quan tâm nhiều và viết nhiều phương pháp chỉ ủy quyền :-) – daphshez

+0

Có bất kỳ đối số @SuppressWarning nào để đối phó với sự kiểm tra này không? – Sebastian

+0

Có. Bạn có thể nhấn Alt-Enter trên bất kỳ đánh dấu kiểm tra nào và chọn hành động ngăn chặn từ trình đơn. – yole

2

Bạn có thể thêm @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") để bỏ qua nó.

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