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.
Avez-vous une sous-classe du code généré, qui remplace peut-être 'equals' et n'ajoute pas l'annotation? – ThrawnCA
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