Подтвердить что ты не робот

Аннотации по интерфейсам?

Я не могу понять пример использования возможности аннотировать интерфейсы в Java.

Может кто-нибудь может привести мне пример?

4b9b3361

Ответ 1

Я использовал его в Spring для аннотирования интерфейсов, где аннотация должна применяться ко всем подклассам. Например, скажем, у вас есть служебный интерфейс, и у вас может быть несколько реализаций интерфейса, но вы хотите, чтобы аннотация безопасности применялась независимо от аннотации. В этом случае наиболее целесообразно аннотировать интерфейс.

Ответ 2

Я использую findbugs. Я нахожу использование annotations, чтобы указать ограничения Nullity очень полезными. Даже если вы на самом деле не используете findbugs, это делает код намного понятнее. Эти аннотации имеют место на интерфейсах так же, как и Классы. Вы можете утверждать, что это своего рода программирование по контракту...

Ответ 3

Даже без примеров, должно быть ясно объяснять - интерфейсы описывают поведение, и поэтому могут аннотации, поэтому это логическое совпадение для их объединения.

Ответ 4

Я использую пример использования javax/hibernate bean, мы используем интерфейсы, чтобы помочь нам избежать определения валидаций для каждого конкретного класса.

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

public class WebUser implements IUser {
    private Long userId;

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

Ответ 5

Еще один пример, но Local и Remote в EJB3. Согласно java doc,

При использовании на интерфейсе этот интерфейс как локальный бизнес интерфейс.

Я предполагаю, что прецедент заключается в том, что интерфейс имеет специальную функцию, которую лучше всего обозначить аннотацией.

Ответ 6

Я видел, что многие инструменты исследования используют аннотации методов, позволяющие пользователям указывать протоколы, ограничения и т.д., чтобы облегчить автоматическую проверку позже.

Поскольку аннотации не определяют, что вы можете с ними делать, нет веской причины не позволять пользователям аннотировать интерфейсы.

Ответ 7

Вы можете использовать его для программирования стиля контракта - идти на один шаг дальше, чем просто определять интерфейс (типы и имена методов), а также определять некоторую семантику (содержимое типов, предварительных условий, постусловий).

Мне нужно будет проверить, как работают аннотации в Java, но этот материал можно легко сделать с помощью аннотаций Python...

Ответ 8

При развертывании приложений под JBoss вы можете использовать аннотации на интерфейсе для экспорта сервиса в jmx-консоль.

Ответ 9

Я использовал его при определении интерфейса REST. RESTeasy позволяет создать клиент REST, который использует аннотированный интерфейс (RESTInterfaceV1 в этом примере):

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

Хотя аннотации необходимо дублировать на объекте, который фактически реализует интерфейс REST, сам интерфейс может быть распределен отдельно для тех, кто хочет создать клиент REST Java.

Ответ 10

Я отмечаю свои интерфейсы с помощью @Immutable, чтобы четко указать разработчикам подклассов, которые должны иметь контракт Mutability для класса, реализующего интерфейс. Как утверждает гель, программирование по контракту.