2015-07-06 26 views
22

Tại sao tôi nhận được một cảnh báo từ "NullableProblems" kiểm tra trong IntelliJ về điều này:không rõ ràng cảnh báo kiểm tra "NullableProblems" trong IntelliJ

public class Test implements Comparable<Test> { 
    @Override 
    public int compareTo(Test o) { 
     return 0; 
    } 
} 

Tôi đang sử dụng IntelliJ 14.1.4 và biên soạn với Java 1,7

Ảnh chụp màn hình:

enter image description here

Thêm @NotNull trước khi tranh luận không giúp:

enter image description here

+0

đã đọc tất cả mọi thứ về ' '@ Nullable'' và' 'tính năng @ NotNull'' [ở đây] (https://www.jetbrains.com/idea/documentation/howto.html) –

+0

Trùng lặp: http://stackoverflow.com/questions/24728627/meaning-of-android-studio-error-not-annotated-parameter-overrides-nonnull-para – davidgiga1993

+3

@ davidgiga1993 Không trùng lặp. Tôi đang ghi đè phương thức không có chú thích '@ NotNull'. – traveh

Trả lời

18

Từ Comparable.compareTo:

@throws NullPointerException if the specified object is null 

Vì vậy, IntelliJ biết, rằng đối tượng không nên null và thêm một @NotNull chú thích automatically:

IntelliJ IDEA sẽ xem xét kỹ SDK và các thư viện bytecode và sẽ suy ra các chú thích này một cách tự động để sau này chúng có thể được sử dụng để phân tích mã nguồn để phát hiện những nơi bạn bỏ qua null.

phương pháp overriden bạn không bao gồm chú thích này, vì vậy nó ghi đè hành vi này làm cho các tham số nullable - so với hợp đồng của giao diện Comparable.

Bạn có thể giải quyết vấn đề này bằng cách thêm @NotNull trước tham số.

Bạn cũng có thể vô hiệu hóa kiểm tra điều này bằng cách nhấn Alt + Nhập, chọn cảnh báo trong menu popup và chọn Disable inspection trong sub-menu.

Kiểm tra Web Helpthis thread để biết thêm thông tin về các chú thích @NotNull/@NonNull.

+4

Hmm, bây giờ tôi hiểu được cảnh báo ban đầu đến từ đâu (kiểm tra lớp siêu là thứ đầu tiên tôi kiểm tra), nhưng khi tôi thêm '@ NotNull', nó không xóa cảnh báo ... (cập nhật câu hỏi gốc với ảnh chụp màn hình) . – traveh

+3

Bạn đang sử dụng chú thích "sai" '@ NotNull'. Có [một số chú thích NotNull/NonNull] (http://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use) ngoài đó, không có trong số chúng được bao gồm trong JDK. Bạn sẽ cần phải bao gồm và sử dụng một trong số đó. Ngoài ra, hãy xem [Trợ giúp Web] (https://www.jetbrains.com/idea/documentation/howto.html). –

+2

Ha! Lạ, khi tôi thêm @NotNull, nhập khẩu là IntelliJ được thêm vào tự động (sau khi nhập alt-enter). Tôi đã xem xét câu hỏi khác mà bạn đã liên kết và tôi giả định rằng 'com.intellij.annotations.NotNull' là chú thích chính xác, nhưng có vẻ như IntelliJ không thể tìm thấy lớp học ... – traveh

0

của nó vì rằng bạn đang trọng một phương pháp mà không có chú thích @NotNull.

IntelliJ IDEA cảnh báo bạn nếu phương pháp ghi đè không có chú thích @NotNull.

+0

Không. Kiểm tra giao diện. – traveh

4

Điều này có thể được định cấu hình toàn cầu trong IntelliJ IDEA dễ dàng và cho cá nhân tôi là cách được khuyến nghị. Nếu bạn muốn, bạn có thể thêm chú thích của riêng mình.
tức javax.validation.constraints.NotNull

Đường dẫn đến các thiết lập:
Settings > Editor > Inspections > @NotNull/@Nullable problems > Configure annotations

Một số ảnh chụp màn hình: enter image description here enter image description here

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