7
votes

Intellij Idea Signaler un avertissement de violation du contrat

Voici le code Java:

public static boolean anyEqual(Object needle, Object... haystack) {
    if(needle == null || haystack == null) {
        return false;
    }
    if(haystack.length == 0) {
        return false;
    }
    for(Object match : haystack) {
        if(match != null && needle.getClass() == match.getClass() && needle.equals(match)) {
            return true; // warning from IntelliJ here, 'contract clause !null, null -> false is violated'
        }
    }
    return false;
}


2 commentaires

Y a-t-il une annotation au-dessus de la méthode?


Ressemble à Youtrack.JetBrains.com/issue/idea-136079 , corrigé dans 14.1 EAP chez confluence.jetbrains.com/display/idedev/idea+14.1++_ a>


3 Réponses :



5
votes

Intellij insère la formelle contrat de votre méthode pour être ceci: xxx pré>

Qu'est-ce que cela signifie réellement: p>


2 commentaires

Lien vers la documentation d'Annotation de contrats Intellij est cassé. version actuelle ici .


@FLAVIN: Merci, mais à l'avenir, vous pouvez suggérer une modification. J'aurais probablement approuvé celui-là.



1
votes

Ceci ressemble à un bug de Intellij pour moi, car en supprimant le mot clé Static de la méthode, l'avertissement disparaît.

Quelque chose doit dérouter l'analyse statique ici. On peut toujours soumettre ceci à Youtirk afin que Jetbrains Devs puisse le regarder.

Quelqu'un a déjà signalé ce numéro ici

(Testé sur V14.0.3)


1 commentaires

Ou changez le type de retour Boolean et renvoyez Boolean.True, il ira aussi bien.