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).