2017-10-15 8 views
0

J'ai une classe très simple et j'utilise la librairie Immutables. Le code généré automatiquement définit méthode equals comme ceci:Immutables lib ajoute @Nullable à la méthode equals()

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

L'annotation @Nullable provoque l'erreur FindBugs suivante:

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.

J'utilise Immutables-valeur-2.5.6.jar

Quelqu'un a-t-il déjà vu cette erreur?

J'ai atténué le problème temporairement en ajoutant:

@SuppressFBWarnings 

à la classe Immutables. Mais je ne pense pas que ce soit une solution à long terme. Il doit y avoir quelque chose d'autre qui me manque.

+1

Avez-vous une sous-classe du code généré, qui remplace peut-être 'equals' et n'ajoute pas l'annotation? – ThrawnCA

+0

Je considérerais cela comme correct si une classe prioritaire élargit l'entrée qu'elle accepte, comme cela arrive dans ce cas. Passer de «@ Nullable» à «@ Nonnull» serait définitivement une rupture de contrat, alors que le contraire est simplement une extension du contrat. FB est faux dans ce cas. – Henrik

Répondre

2

Cela semble être un bug ouvert dans le projet FindBugs (https://sourceforge.net/p/findbugs/bugs/1385/), donc je dirais que la désactivation de l'avertissement en utilisant une annotation est bien jusqu'à la prochaine version.

This class suggère que le projet SpotBugs, qui est le successeur de FindBugs, a résolu le problème. Peut-être envisager de migrer?


Mise à jour: La question FindBugs a été fermé depuis.

+1

Il semble en effet le développement FindBugs est mort, et SpotBugs prend le relais. –