2015-07-02 86 views
3

我寫了一個實現可比接口的類。我使用@NotNull註釋來抑制方法參數中的waring。但它仍顯示警告。IDE自動導入此包com.sun.istack.internal.NotNull@NotNull。這是爲什麼呢?不使用此註釋如何刪除此警告?
我正在用java 8 SE使用Inteij Ultimate。 這是我的代碼片段。 enter image description here爲什麼不@NotNull anotation刪除警告?

謝謝。

+1

嘗試在「compareTo」方法中添加@Nonnull(javax.annotation.Nonnull)。 –

+0

正確,'javax.annotation.NonNull'是正確的。 –

+1

@uraimo在'javax.annotation'包中我看不到任何註釋,如'NotNull'或'Nonnull'。當我試圖寫下'javax.annotation.NotNull'或'javax.annotation.Nonnull'時,發生錯誤。 – seal

回答

5

顯然,你應該使用

public int compareTo(@NonNull Node node) { 

代替

public int compareTo(@NotNull Node node) { 

編譯器可以判斷其中的代碼路徑可能會收到一個空值的情況下,而不必調試NullPointerException

here.

對於這些註釋,你需要安裝Checker Framework。或者你可以嘗試其他答案所說的話。

+1

不是Android的問題,即使IDE處於暗模式:) –

+1

@uraimo哎呀,我在錯誤的標籤! xD我會改變它。 –

+0

@uraimo編輯的定義/鏈接是更加相關的OP :) –

1

更改您的進口,您可以使用intellij自己的com.intellij.annotations.NotNulljavax.annotation.Nonnulljavax.validation.constraints.NotNull

這是一個IntelliJ功能,它實際上可以配置使用哪個可以爲空的/ notnull註釋,請參閱this guide

如果這不能解決它,並且該消息似乎暗示了這一點,請嘗試刪除@override,您將在超級類中沒有它的參數添加註釋。

+1

在'javax.annotation'包中沒有'@ NotNull'或'@ Nonnull'註釋。我根據你給定的鏈接改變了配置,但是我的ide仍然無法在那個包中找到這些註釋。 – seal

+0

[我有這些註釋](http://grepcode.com/snapshot/repo1.maven.org/maven2/org.glassfish/javax.annotation/3.1),除了'ManagedBean'。 – seal