2009-06-15 14 views
7

Parfois, les structures de données doivent avoir certaines relations qui ne peuvent pas être directement décrites en Java, mais qui peuvent être vérifiées le plus tôt possible lorsque le code est modifié. Les exemples classiques sont qu'un tableau est assez grand ou que les énumérations dans différents modules ont des membres correspondants. BOOST fournit une fonction «assertion statique» fine en C++ qui fournit même des erreurs demi-décentes lorsque les assertions échouent; est-ce que quelqu'un sait comment construire une facilité d'assertion à la compilation en Java?Comment faire valoir quelque chose à la compilation en Java?

Édition: Je viens juste de voir un exemple parfait: la classe this d'Eclipse a deux tableaux constants supposés avoir la même longueur. Si c'était mon code, j'aimerais que le compilateur me dise s'ils ont des longueurs différentes.

+3

Je ne sais pas que je suis d'accord que "les structures de données doivent avoir certaines relations qui ne peuvent pas être directement décrites en Java." Vos exemples semblent invalides. La relation entre la taille d'un tableau et le reste du programme peut être exprimée en définissant la taille du tableau avec une variable. Et si vous avez un Enum dans un paquet, pourquoi ne le référeriez-vous pas simplement à un autre? En fait, je ne peux pas trouver de raison pour que plusieurs Enums aient des éléments correspondants. Si Foo est censé avoir les mêmes éléments que Bar, pourquoi ne pas utiliser Foo partout? N'est-ce pas le but d'un Enum? –

+0

Pouvez-vous donner un exemple plus spécifique du type de chose que vous aimeriez pouvoir affirmer de cette façon? –

Répondre

2

Les compilateurs incrémentaux qui font partie d'EDI comme Eclipse peuvent être configurés pour lancer des avertissements ou des erreurs lors de la recherche de code java légal, mais peuvent causer des problèmes lors de l'exécution. Vous pouvez augmenter ces paramètres aussi loin que vous le souhaitez, même si cela peut devenir envahissant et ennuyeux.

7

Il y a un certain nombre d'outils que vous pouvez utiliser

  • PMD
  • Checkstyle
  • FindBugs
  • méthodes Valider à Jakarta Commons-lang (nous utilisons ce lieu d'affirmer et le laisser dans) Cobaltura/EMMA (pour la couverture de code)
  • .

Une combinaison de ces bons et tests unitaires attraper le fruit suspendu faible (et certaines des choses plus aussi)

+1

+1 pour utiliser les tests unitaires comme étant essentiellement une étape plus proche du temps de compilation que le temps d'exécution. –

Questions connexes