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.

0voto

DGoiko Points 120

Avec @interface, vous définissez des annotations, avec interface, vous définissez des interfaces.

Extrait de la documentation d'Oracle : "Les annotations n'affectent pas directement la sémantique du programme, mais elles affectent la façon dont les programmes sont traités par les outils et les bibliothèques, qui peuvent à leur tour affecter la sémantique du programme en cours d'exécution. Les annotations peuvent être lues à partir des fichiers source, des fichiers de classe ou de manière réfléchie au moment de l'exécution."

Les annotations ont généralement deux utilisations principales : Elles aident à définir des contrats de programmation (comme l'annotation @Nonnull), ce qui signifie qu'elles ne font rien en réalité, mais servent aux programmeurs et à IDES pour détecter des codes d'erreur potentiels, et il y a des annotations d'exécution, qui sont généralement utilisées par les frameworks pour la configuration (comme l'annotation @Service dans Spring) : Le noyau détecte les classes dans votre champ d'application avec des annotations spécifiques et leur applique une logique (tout exemple auquel vous pouvez penser, comme la définition de serveurs Java, la création de singletons, etc.)

En règle générale, un programmeur débutant effectuant des tâches de base normales aura rarement besoin de définir des annotations, mais la définition et l'utilisation d'interfaces est quelque chose de fondamental que tout nouveau développeur devrait apprendre si son langage le permet : Les bonnes pratiques recommandent généralement l'utilisation d'interfaces dans votre code pour des raisons de maintenabilité.

Dans mon expérience personnelle, j'ai défini et utilisé des interfaces Java presque depuis le jour où j'ai appris Java, mais je n'ai pas eu besoin de DÉFINIR une annotation (étiqueter des choses avec des annotations existantes est une autre histoire) avant ma 5ème-6ème année de travail professionnel avec Java, et il s'agissait d'un projet très spécifique, un autogénérateur de code, quelque chose comme Lombok mais beaucoup plus spécifique pour un client.

Je suppose que cela dépend de la nature de votre travail, mais à ce jour, je ne peux pas compter le nombre d'interfaces que j'ai définies, mais les annotations pourraient être comptées avec les doigts des deux mains. Je pense qu'il y a de bonnes chances qu'un développeur Java puisse commencer et terminer sa carrière sans avoir défini une seule interface (à moins d'utiliser la génération de documentation basée sur les annotations de swagger xD).

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