Pergunta

Não consigo descobrir um caso de uso para poder anotar interfaces em Java.

Talvez alguém possa me dar um exemplo?

Foi útil?

Solução

Eu o usei na primavera para anotar interfaces onde a anotação deve ser aplicada a todas as subclasses. Por exemplo, digamos que você tenha uma interface de serviço e pode ter várias implementações da interface, mas deseja que uma anotação de segurança se aplique, independentemente da anotação. Nesse caso, faz mais sentido anotar a interface.

Outras dicas

eu uso FindBugs extensivamente. Eu acho o uso de anotações para especificar restrições de nulidade muito úteis. Mesmo se você realmente não usar o FindBugs, isso torna a intenção do código muito mais clara. Essas anotações têm seu lugar em interfaces tanto quanto as classes. Você poderia argumentar que é meio que programação por contrato ...

Mesmo sem exemplos, deve ficar claro - as interfaces descrevem o comportamento, e as anotações também podem, por isso, é uma correspondência lógica para montá -las.

Um caso de uso com o qual estou trabalhando é a validação do Javax/Hibernate Bean, estamos usando interfaces para nos ajudar a evitar definir validações em todas as classes específicas.

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

public class WebUser implements IUser {
    private Long userId;

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

Mais um exemplo, mas Local e Controlo remoto Anotações no EJB3. De acordo com o documento Java,

Quando usado em uma interface, designa essa interface como uma interface de negócios local.

Eu acho que o caso de uso aqui é que a interface tem uma função especial melhor indicada por uma anotação.

Já vi muitas ferramentas de pesquisa usarem anotações de método para permitir que os usuários especifiquem protocolos, restrições etc. para facilitar a verificação automática posteriormente.

Como as anotações não ditam o que você pode fazer com elas, não há uma boa razão para não permitir que os usuários anotem as interfaces.

Você pode usá -lo para programação de estilo de contrato - vá um passo além do que apenas definir a interface (tipos e nomes de métodos) e também definir alguma semântica (conteúdo dos tipos, pré -condições, pós -condicionas).

Eu teria que verificar como as anotações funcionam em Java, mas essas coisas podem ser facilmente feitas com anotações Python ...

Ao implantar aplicativos no JBoss, você pode usar anotações em uma interface para exportar um serviço no JMX-Console.

Eu o usei ao definir uma interface de repouso. RestEasy permite criar um cliente REST que use uma interface anotada (RestInterfaceV1 neste exemplo):

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

Embora as anotações tenham que ser duplicadas no objeto que realmente implementa a interface restante, a própria interface pode ser distribuída separadamente para aqueles que desejam fazer um cliente Java Rest.

Marquei minhas interfaces com @imutable para indicar claramente para os desenvolvedores de subclasses que contratam uma classe que uma classe implementando a interface deve ter. Como Gehel coloca, programação por contrato.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top