Question

Je ne peux pas trouver de cas d'utilisation pour pouvoir annoter des interfaces en Java.

Peut-être que quelqu'un pourrait me donner un exemple?

Était-ce utile?

La solution

Je l'ai utilisé dans Spring pour annoter des interfaces dans lesquelles l'annotation devrait s'appliquer à toutes les sous-classes. Par exemple, disons que vous avez une interface de service et que vous pouvez avoir plusieurs implémentations de l'interface, mais que vous souhaitez qu'une annotation de sécurité s'applique quelle que soit l'annotation. Dans ce cas, il est préférable d’annoter l’interface.

Autres conseils

J'utilise findbugs de manière approfondie. Je trouve l’utilisation des des annotations pour spécifier les contraintes de nullité. Même si vous n'utilisez pas réellement findbugs, cela rend le code beaucoup plus clair. Ces annotations ont leur place autant sur les interfaces que sur les classes. On pourrait dire qu’il s’agit d’une sorte de programmation par contrat ...

Même sans exemples, l'explication doit être claire: les interfaces décrivent le comportement, de même que les annotations, il est donc logique de les assembler.

Le cas d'utilisation avec lequel je travaille est la validation de bean javax / hibernate. Nous utilisons des interfaces pour nous aider à éviter de définir des validations pour chaque classe spécifique.

public interface IUser {
    @NotNull Long getUserId();
    ...
}

public class WebUser implements IUser {
    private Long userId;

    @Override
    public Long getUserId(){
        return userId;
    }
    ...
}

Plus un exemple, mais Local et Annotations à distance dans EJB3. Selon le doc Java,

  

Lorsqu'il est utilisé sur une interface, désigne   cette interface en tant qu'entreprise locale   interface.

Je suppose que le cas d'utilisation ici est que l'interface possède une fonction spéciale, mieux désignée par une annotation.

J'ai vu de nombreux outils de recherche utiliser des annotations de méthodes pour permettre aux utilisateurs de spécifier des protocoles, des restrictions, etc. afin de faciliter la vérification automatique plus tard.

Etant donné que les annotations ne dictent pas ce que vous pouvez en faire, il n'y a aucune bonne raison de ne pas autoriser les utilisateurs à annoter les interfaces.

Vous pouvez l’utiliser pour une programmation de type contractuelle - allez au-delà de la simple définition de l’interface (types et noms de méthodes) et définissez également une sémantique (contenu des types, préconditions, post-conditions).

Je devrais toutefois vérifier le fonctionnement des annotations en Java, mais cela pourrait facilement être fait avec des annotations en Python ...

Lors du déploiement d'applications sous JBoss, vous pouvez utiliser des annotations sur une interface pour exporter un service dans la console jmx.

Je l'ai utilisé lors de la définition d'une interface REST. RESTeasy vous permet de créer un client REST utilisant une interface annotée (RESTInterfaceV1 dans cet exemple):

final RESTInterfaceV1 client = ProxyFactory.create(RESTInterfaceV1.class, "http://localhost:8080/rest");

Bien que les annotations doivent être dupliquées sur un objet qui implémente réellement l'interface REST, l'interface elle-même peut être distribuée séparément à ceux qui souhaitent créer un client Java REST.

Je marque mes interfaces avec @Immutable pour indiquer clairement aux développeurs de sous-classes le contrat de mutabilité qu'une classe implémentant l'interface doit avoir. Comme le dit gehel, programmer par contrat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top