2008-09-28 3 views
18

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

Может быть, кто-нибудь может дать мне пример?

+8

Отлично подходит для того, чтобы разозлить парня JavaScript, пытающегося понять вашу Java. – 2013-06-12 15:58:56

ответ

20

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

+0

Более конкретно, @Transactional, который вы можете применить к классу Spring bean, любому из его методов или интерфейсам или интерфейсам, которые реализует класс, в то время как он имеет лучший смысл. – skaffman 2008-09-28 20:26:18

1

Еще один пример, но Local и Remote аннотации в EJB3. В соответствии с Java док,

При использовании на интерфейсе, обозначает , что интерфейс в качестве локального интерфейса бизнес .

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

0

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

я должен проверить на том, как работать аннотаций в Java, хотя, но этот материал можно было бы легко сделать с аннотациями Python ...

4

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

1

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

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

4

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

0

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

0

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

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

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

0

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

4

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

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

public class WebUser implements IUser { 
    private Long userId; 

    @Override 
    public Long getUserId(){ 
     return userId; 
    } 
    ... 
} 
Смежные вопросы