418 votes

Quelle est la différence entre interface et @interface en Java ?

Je n'ai pas touché à Java depuis que j'ai utilisé JBuilder à la fin des années 90 alors que j'étais à l'université, je suis donc un peu déconnecté - en tout cas, j'ai travaillé sur un petit projet Java cette semaine, et j'ai utilisé Intellij IDEA comme IDE, pour changer de rythme par rapport à mon développement .Net habituel.

Je remarque qu'il permet d'ajouter des interfaces et des @interfaces. Qu'est-ce qu'une @interface et en quoi diffère-t-elle d'une interface normale ?

public interface Test {
}

vs.

public @interface Test {
}

J'ai fait quelques recherches, mais je n'ai pas trouvé beaucoup d'informations utiles concernant @interface.

413voto

mrkishi Points 1237

Les @ indique une définition de type d'annotation.

Cela signifie qu'il est no vraiment une interface, mais plutôt un nouveau type d'annotation -- à utiliser comme modificateur de fonction, tel que @override .

Voir ceci entrée javadocs sur le sujet.

18 votes

Merci beaucoup, c'est bon à savoir. Alors, pourquoi l'appeler @interface, plutôt que @annotation, je me demande cela semble être un terme inutilement surchargé.

10 votes

Le didacticiel et le JLS font allusion à une annotation comme étant un type spécial d'interface. Il ne semble pas y avoir beaucoup de discussions sur le sujet, mais il est possible d'en savoir plus sur le sujet. javarunner.blogspot.com/2005/01/annotations-en-java-15.html explique que les annotations sont une extension implicite de l'interface Annotation et que @ et interface sont utilisés ensemble pour se différencier d'une interface normale. Vous pouvez également consulter la spécification JSR pour les annotations.

3 votes

@Bittercoder la documentation mentionne effectivement : "le mot-clé interface est précédé du signe at (@) (@ = AT, comme dans type d'annotation)". C'est tout ce que j'ai pu trouver en ce qui concerne le nommage.

154voto

mavis Points 341

L'interface :

En général, une interface expose un contrat sans exposer les détails de la mise en œuvre sous-jacente. Dans la programmation orientée objet, les interfaces définissent des types abstraits qui exposent un comportement, mais ne contiennent aucune logique. L'implémentation est définie par la classe ou le type qui implémente l'interface.

@interface : (Type d'annotation)

Prenons l'exemple ci-dessous, qui a fait l'objet de nombreux commentaires :

public class Generation3List extends Generation2List {

   // Author: John Doe
   // Date: 3/17/2002
   // Current revision: 6
   // Last modified: 4/12/2004
   // By: Jane Doe
   // Reviewers: Alice, Bill, Cindy

   // class code goes here

}

Au lieu de cela, vous pouvez déclarer un type d'annotation

 @interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   // Note use of array
   String[] reviewers();
}

qui peut alors annoter une classe comme suit :

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   // Note array notation
   reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {

// class code goes here

}

PS : De nombreuses annotations remplacent les commentaires dans le code.

Référence : http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html

6 votes

C'était en fait utile. Je ne savais pas que Java pouvait faire cela.

0 votes

La réponse précédente contenait ce lien, d'où proviennent ces informations. Je l'ai trouvé utile pour trouver plus d'informations sur ce sujet. docs.oracle.com/javase/tutorial/java/annotations/declaring.html

1 votes

L'une des meilleures réponses complètes (et pourtant claires) que j'ai pu voir sur stackoverflow.

38voto

DavidValeri Points 1494

Les interface indique que vous déclarez une classe d'interface traditionnelle en Java.
Les @interface est utilisé pour déclarer un nouveau type d'annotation.

Véase docs.oracle tutoriel sur les annotations pour une description de la syntaxe.
Voir le JLS si vous voulez vraiment entrer dans les détails de ce que les @interface signifie.

26voto

eosimosu Points 1085

interface: définit le contrat d'une classe qui l'implémente

@interface: définit le contrat d'une annotation

16voto

Piyush Singh Points 153

interface dans le langage de programmation Java est un type abstrait utilisé pour spécifier un comportement que les classes doivent implémenter. Elles sont similaires aux protocoles. Les interfaces sont déclarées à l'aide du mot-clé interface

@interface est utilisé pour créer vos propres annotations Java (personnalisées). Les annotations sont définies dans leur propre fichier, tout comme une classe ou une interface Java. Voici un exemple d'annotation Java personnalisée :

@interface MyAnnotation {

    String   value();

    String   name();
    int      age();
    String[] newNames();

}

Cet exemple définit une annotation appelée MyAnnotation qui comporte quatre éléments. Remarquez le mot-clé @interface. Il signale au compilateur Java qu'il s'agit d'une définition d'annotation Java.

Notez que chaque élément est défini de la même manière qu'une définition de méthode dans une interface. Il possède un type de données et un nom. Vous pouvez utiliser tous les types de données primitifs comme types de données d'éléments. Vous pouvez également utiliser des tableaux comme types de données. Vous ne pouvez pas utiliser d'objets complexes comme type de données.

Pour utiliser l'annotation ci-dessus, vous pouvez utiliser un code comme celui-ci :

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {

}

Référence - http://tutorials.jenkov.com/java/annotations.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X