2009-12-03 5 views
16

Je suis curieux de savoir exactement que les annotations de Java les gens pensent sont le plus utile pendant le développement. Cela ne doit pas nécessairement se limiter à l'API Java principale, vous pouvez inclure des annotations que vous avez trouvées dans des bibliothèques tierces ou des annotations que vous avez développées vous-même (assurez-vous d'inclure un lien vers la source).Annotations utiles de Java

Je suis vraiment intéressé par tâches de développement commun plutôt que de savoir pourquoi le @ManyToOne(optional=false) JPA est génial ...

Inclure l'annotation et une description des raisons pour lesquelles il est utile pour le développement général.

+0

[Créez votre propre lanceur de test à l'aide d'annotations Java] (http://www.singhajit.com/java-custom-annotations/) –

Répondre

20

Je distribuait un tas de upvotes pour d'autres utilisateurs, mais juste pour donner mes deux cents les seuls trois annotations que j'utilise avec une certaine régularité dans le développement sont les principales annotations utilisées directement par le compilateur:

@Override - Idéal pour le rendre explicite dans votre code lorsque vous remplacez une autre méthode. A également l'avantage supplémentaire d'être marqué comme une erreur de compilation si vous ne remplacez pas une méthode comme vous le pensez (voir other SO post). Ce drapeau informe le compilateur que vous avez l'intention de remplacer quelque chose, donc si vous ne le faites pas (par exemple si vous oubliez un argument dans la signature de la méthode), le compilateur l'attrapera.

@Deprecated - Indiquez ce que vous voulez marquer comme quelque chose qui ne devrait pas être utilisé à partir de ce moment. Le compilateur générera des avertissements pour l'utilisation de tout élément de code que vous avez marqué comme obsolète. En général, la dépréciation dit «c'était dans le passé, mais cela pourrait disparaître dans une version future». Assurez-vous que vous utilisez également l'indicateur Javadoc associé "@deprecated" associé à cela pour indiquer aux utilisateurs ce qu'ils doivent utiliser à la place.

@SuppressWarnings - Dites au compilateur de supprimer les avertissements spécifiques qu'il générerait autrement. Cela peut être utile pour des choses comme lorsque vous voulez intentionnellement utiliser des méthodes obsolètes, vous pouvez bloquer l'avertissement de désapprobation. J'ai tendance à l'utiliser beaucoup pour bloquer l'avertissement «Serialization UID» préféré de tout le monde sur les classes sérialisables (que ce soit ou que ce soit un autre débat pour une autre fois). Juste utile pour les cas où vous savez que quelque chose que vous faites génère un avertissement, mais vous êtes sûr à 100% que c'est le bon comportement que vous voulez.

Regardez le Sun Annotations Guide et consultez la section "Annotations utilisées par le compilateur". Ces trois ont une discussion assez longue.

7

@Test

(JUnit 4) Il est fait par écrit et les fichiers de test compréhension tout à fait un peu plus propre. De plus, la possibilité d'ajouter l'attribut expected a permis d'économiser quelques lignes de code ici et là.

3

Junit 4 fournit des annotations très utiles. Here's a tutorial illustrant l'utilisation des annotations pour définir des tests.

par exemple.

@Test(expected= IndexOutOfBoundsException.class) public void empty() { 
    new ArrayList<Object>().get(0); 
} 

Comme Dan a souligné ci-dessous, TestNG a fait cette origine.

+1

Comme le fait TestNG, C'est là que JUnit a eu l'idée. –

+0

Bien sûr! J'avais complètement oublié ça. –

6

ceux-ci devraient être utiles, vous pouvez les définir dans vos projets afin de mieux communiquer les intentions:

  • @ThreadSafe
  • @Immutable
  • @ValueObject
  • @BagOfFunctions (par exemple java.util. collections)
  • etc
7

@Deprecated

Introduced in Java 5.

  • Il aide les développeurs à voir ce qui est déprécié dans les IDE. (Avant cela, la plupart des EDI pouvaient encore tirer un @deprecated des commentaires javadoc pour une méthode particulière, mais cette annotation était une bonne façon de faire des méta-informations sur la méthode elle-même, plutôt qu'un commentaire dans la documentation.)
  • Il est également utilisé par le compilateur pour imprimer des avertissements lorsque vous utilisez des méthodes obsolètes.
+3

Dommage qu'il ne prenne pas de commentaire descriptif en paramètre. Aimeriez-vous voir @deprecated ("Méthode dangereuse, utilisez bla bla à la place") – serg10

+0

Je pense que la raison pour laquelle il ne prend pas de paramètre est parce qu'il y a déjà une balise Javadoc @Deprecated à faire exactement cela. –

9

@Override a mon vote. Cela permet de savoir instantanément à quoi sert votre méthode et rend votre code plus lisible.

+0

Et signale également une méthode incorrectement substituée dans la plupart des IDE. –

+0

Je ne suis pas d'accord. avec l'IDE moderne, c'est redondant et inutile. Je ne comprends pas pourquoi tant de @Override apparaissant sur ce site, est-ce parce qu'Eclipse ajoute cela par défaut et que beaucoup de gens utilisent Eclipse? – irreputable

+1

Toutes les constructions ne se produisent pas dans un IDE. Les générations de lots via Ant, Maven ou CI bénéficient toujours d'annotations telles que @Override. Ils aident aussi ce membre de l'équipe qui refuse d'abandonner vim. –

3

Voici quelques annotations que j'utilise au jour le développement de jour

printemps:

  1. @Autowired - utilisé pour Auto grains de fil
  2. @Rollback - Si vrai, il annulera toutes les opérations DB effectuées à l'intérieur du cas de test

JUnit:

  1. @Test - dire qu'une méthode est un test
  2. @ignore - Si vous voulez ignorer l'un des cas de test
  3. @Before - Code qui devrait courir avant chaque cas de test

JPA:

  1. @Entity - Pour dire qu'un POJO est une entité JPA
  2. @Column - Carte de la propriété à la colonne DB
  3. @Id - dire qu'une propriété java est la clé primaire
  4. @embeddedId - Utilisé pour les clés composites primaires
  5. @Transient - Cette propriété ne doit pas être persisté
  6. @Version - Permet de gérer le verrouillage optimiste
  7. @NamedQuery - Utilisé pour déclarer autochtones SQLs
  8. @OneToMany - relation un à plusieurs
  9. @ManyToOne - Beaucoup à une relation

J'ai inclus seulement les plus essentiels. Vous pouvez trouver des détails sur toutes les annotations JPA à partir des liens suivants.

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

http://www.hiberbook.com/

0

j'ai commencé un projet de week-end pour mettre en œuvre une programmation par contrat cadre de l'aide d'annotations méthode et paramètres par exemple

...myMethod (@NotNull chaîne a, b @NotNullOrEmpty cordes) {

 if (!validate()){ 
     raiseException .. 
    } 

}

je me suis coincé au point d'obtenir des valeurs de param automatiquement. La réflexion Java ne l'a pas. Je n'ai jamais compris les propos de plusieurs personnes sur Java jusqu'à ce que je rencontre cette limitation.

+0

ne peut pas l'avoir puisque cette information est disponible uniquement dans les versions de débogage ... pas sûr si ce serait une bonne idée de le rendre toujours disponible ... – TofuBeer

+1

Penser à cela ... plutôt que d'utiliser le nom ne pouvez-vous pas en quelque sorte faire utilisation de la position? C'est une chose intéressante (et quelque chose que j'ai pensé faire aussi ...). – TofuBeer

7

Personnellement, je l'ai regardé le JSR303 Bean Validation et les annotations qu'il fournit, j'imagine ceux-ci deviennent monnaie courante, il n'y a que quelques implémentations du JSR jusqu'à présent, mais ils fournissent des annotations telles que:

@NotNull private String name; 
@NotNull @Size(min = 5, max = 30) private String address; 

Plus d'infos ici: http://jcp.org/en/jsr/detail?id=303

+0

J'utilise beaucoup '@ Nonnull' et' @ CheckForNull' avec FindBugs. –

2

@Given

permet un test JUnit pour construire sur la valeur de retour d'un autre te st. Nécessite JExample.

11

je trouve les annotations liées il définies par la simultanéité Brian Goetz dans son livre "Programmation concurrente en Java" très utile:

  • @GuardedBy
  • @Immutable
  • @NotThreadSafe
  • @ThreadSafe

Ils sont particulièrement utiles car FindBugs a des modèles qui les utilisent.

Un pot et de la documentation est disponible gratuitement à l'http://www.javaconcurrencyinpractice.com/

2

Nous avons commencé à utiliser un outil de compilation appelé lombok (http://projectlombok.org/). Vous annotez les classes, les membres, etc. et les méthodes sont générées automatiquement au moment de la compilation. C'est un excellent moyen de stimuler la productivité et d'économiser des centaines de lignes de codage fastidieux.

Souhaitez-vous qu'une méthode toString() soit générée automatiquement? Juste annoter votre classe avec @ToString. Fatigué de devoir définir des getters et setters pour vos membres? Annoter votre classe avec @Getter et/ou @Setter et ils sont automatiquement ajoutés.

Vous voulez avoir un enregistreur SLF4J pour consigner des informations? @Slf4j crée un enregistreur final statique privé pour vous.

@Data 
public class MyBean { 
    // Getters for x and y, setter for y and constructor with x as arg automatically created! 
    // toString() and hashCode() methods are there too! 
    private final int x; 
    private int y; 
} 

.

@Slf4j 
public class SomeClass { 
    public void doSomething() { 
     log.info("I've got log."); 
    } 
} 

Sa mise en place est très simple: il suffit d'ajouter une dépendance provided Maven. Il y a aussi un petit plugin Eclipse/IntelliJ.

Découvrez la liste complète des fonctionnalités RENDRE: http://projectlombok.org/features/index.html