2017-10-15 66 views
0

我有一個非常簡單的類,並使用Immutables庫。自動生成的代碼定義等於像這樣方法:不變的lib添加@Nullable到equals()方法

@Override 
    public boolean equals(@Nullable Object another) { 

的@Nullable註釋導致以下的FindBugs錯誤:

NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION: Method tightens nullness annotation on parameter

A method should always implement the contract of a method it overrides. Thus, if a method takes a parameter that is marked as @Nullable, you shouldn't override that method in a subclass with a method where that parameter is @Nonnull. Doing so violates the contract that the method should handle a null parameter.

我使用Immutables值-2.5.6.jar

有沒有人看到這個錯誤?

我已經通過添加暫時緩解問題:

@SuppressFBWarnings 

到Immutables類。但我不認爲這是一個長期的解決方案。我一定還有其他的東西丟失了。

+1

您是否有生成的代碼的子類,可能會覆蓋'equals'並且不添加註釋? – ThrawnCA

+0

我認爲如果重寫類擴大了它接受的輸入,就像在這種情況下發生的那樣。從@Nullable到'@ Nonnull'肯定會違反合同,而另一種方式只是合同的延伸。在這種情況下FB是錯誤的。 – Henrik

回答

2

這看起來是FindBugs項目(https://sourceforge.net/p/findbugs/bugs/1385/)中的一個開放的bug,所以我會說使用註釋禁用警告是好的,直到下一個版本。

This class表明作爲FindBugs的後繼者的SpotBugs項目解決了該問題。也許考慮遷移?


更新:的FindBugs的問題已經被關閉。

+1

確實看起來FindBugs的開發已經結束,SpotBugs接管了它。 –