Question

Supposons que je le code suivant:

public class MainClass {
    public static void main(String[] args) {
        System.out.println(sumNumbers(10, 10));
    }

    //@requires a >= 10;
    //@ensures \result < 0;
    public static int sumNumbers(int a, int b) {
        return a+b;
    }
}

Je peux faire 2 choses ici:

Utilisez le code des marchés (dans ce cas, ce qui est dans les commentaires). Lorsque sumNumbers est exécuté et <10, il lancera immédiatement une exception (bien qu'il ne semble pas être très descriptif):

Exception in thread "main" org.jmlspecs.jmlrac.runtime.JMLInternalNormalPostconditionError: by method MainClass.sumNumbers
    at MainClass.sumNumbers(MainClass.java:500)
    at MainClass.internal$main(MainClass.java:9)
    at MainClass.main(MainClass.java:286)

ou ...

Jeter une exception. L'exception peut être aussi descriptif que je veux. Je voudrais aussi de vérifier à la fin de la fonction pour voir chaque fois que les conditions de poste sont vraies ou non.

Ce qui utiliseriez-vous ici et pourquoi?

Était-ce utile?

La solution

J'aime l'idée des contrats de code, mais le IllegalArgumentException descriptif (ou similaire) des conseils pour moi. Il est beaucoup plus claire dans un support / rôle de la production (ou même un développement) pour obtenir un message d'exception explicite, ce qui vous donne un bon départ dans le diagnostic ce qui se passe mal (si un système est cassé, ou si vous êtes abusant d'une API au cours du développement ).

Autres conseils

Espérez-vous que les entrées invalides pourraient être transmis à cet argument lors du fonctionnement normal de votre programme? Si elles sont, pouvez-vous à le récupérer?

Si oui, vérifié les exceptions sont la voie à suivre.

Si vous ne pouvez pas récupérer de ce genre de cas, par tous les moyens en font un contrat et ne parviennent fort -. Mais dans les deux cas, j'utiliser un message d'erreur descriptif

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top