Domanda

Non riesco a capire un caso d'uso per poter annotare le interfacce in Java.

Forse qualcuno potrebbe darmi un esempio?

È stato utile?

Soluzione

L'ho usato in primavera per annotare le interfacce in cui l'annotazione dovrebbe applicarsi a tutte le sottoclassi. Ad esempio, supponiamo che tu abbia un'interfaccia di servizio e che tu possa avere più implementazioni dell'interfaccia ma che desideri applicare un'annotazione di sicurezza indipendentemente dall'annotazione. In tal caso, ha più senso annotare l'interfaccia.

Altri suggerimenti

Uso findbugs ampiamente. Trovo molto utile l'uso delle annotazioni per specificare i vincoli di nullità. Anche se in realtà non usi findbugs, l'intento del codice è molto più chiaro. Queste annotazioni hanno il loro posto sulle interfacce tanto quanto sulle classi. Si potrebbe sostenere che è una specie di programmazione per contratto ...

Anche senza esempi, dovrebbe essere chiaro spiegare: le interfacce descrivono il comportamento, così come le annotazioni, quindi è una corrispondenza logica metterle insieme.

Un caso d'uso con cui sto lavorando è la convalida del bean javax / hibernate, stiamo usando interfacce per aiutarci a evitare di definire convalide su ogni classe specifica.

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

public class WebUser implements IUser {
    private Long userId;

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

Più un esempio, ma Local e Remote annotazioni in EJB3. Secondo il documento java,

  

Se utilizzato su un'interfaccia, designa   quell'interfaccia come impresa locale   interfaccia.

Immagino che il caso d'uso qui sia che l'interfaccia ha una funzione speciale meglio indicata da un'annotazione.

Ho visto molti strumenti di ricerca utilizzare annotazioni sui metodi per consentire agli utenti di specificare protocolli, restrizioni, ecc. per facilitare il controllo automatico in seguito.

Poiché le annotazioni non dettano ciò che puoi fare con esse, non c'è motivo di non consentire agli utenti di annotare le interfacce.

Potresti usarlo per la programmazione in stile contratto - fai un passo oltre la semplice definizione dell'interfaccia (tipi e nomi dei metodi) e definisci anche alcune semantiche (contenuto dei tipi, precondizioni, postcondizioni).

Dovrei controllare come funzionano le annotazioni in Java, ma questa roba potrebbe essere facilmente eseguita con le annotazioni Python ...

Quando si distribuiscono applicazioni in JBoss è possibile utilizzare le annotazioni su un'interfaccia per esportare un servizio nella console jmx.

L'ho usato durante la definizione di un'interfaccia REST. RESTeasy ti consente di creare client REST che utilizza un'interfaccia annotata (RESTInterfaceV1 in questo esempio):

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

Sebbene le annotazioni debbano essere duplicate sull'oggetto che implementa effettivamente l'interfaccia REST, l'interfaccia stessa può essere distribuita separatamente a coloro che desiderano creare un client REST Java.

Contrassegno le mie interfacce con @Immutable per indicare chiaramente agli sviluppatori di sottoclassi quale contratto di mutabilità dovrebbe avere una classe che implementa l'interfaccia. Come dice Gehel, programmazione per contratto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top