Comment puis-je place la validation des contraintes sur ma méthode de paramètres d'entrée?

Ici est typique de la façon d'atteindre cet objectif:

public void myContractualMethod(final String x, final Set<String> y) {
    if ((x == null) || (x.isEmpty())) {
        throw new IllegalArgumentException("x cannot be null or empty");
    }
    if (y == null) {
        throw new IllegalArgumentException("y cannot be null");
    }
    //Now I can actually start writing purposeful 
    //   code to accomplish the goal of this method

Je pense que cette solution est laid. Vos méthodes de remplir rapidement avec passe-partout de code de vérification de la validité des paramètres d'entrée du contrat, obscurcissant le cœur de la méthode.

Voici ce que je voudrais avoir:

public void myContractualMethod(@NotNull @NotEmpty final String x, @NotNull final Set<String> y) {
    //Now I have a clean method body that isn't obscured by
    //   contract checking

Si ces annotations ressembler à de la JSR 303/Bean Validation Spec, c'est parce que j'ai emprunté. Unfortunitely ils ne semblent pas fonctionner de cette façon; ils sont prévus pour l'annotation des variables d'instance, puis l'exécution de l'objet par le biais d'un programme de validation.

Qui de la de nombreux Java conception par contrat de cadres fournissent le plus proche de la fonctionnalité mon "aiment avoir" exemple? Les exceptions qui obtiennent lancés doivent être des exceptions d'exécution (comme IllegalArgumentExceptions) afin d'encapsulation n'est pas rompu.

OriginalL'auteur Robert Campbell | 2009-11-27