2008-09-28 11 views
18

Nie mogę znaleźć przypadku użycia, aby móc dodawać adnotacje do interfejsów w Javie.Adnotacje na interfejsach?

Może ktoś mógłby dać mi przykład?

+8

Jest świetny do wkuwania faceta JavaScript próbującego zrozumieć twoją Javę. –

Odpowiedz

20

Używałem go na wiosnę do opisywania interfejsów, w których adnotacja powinna odnosić się do wszystkich podklas. Załóżmy na przykład, że masz interfejs usługi i możesz mieć wiele implementacji interfejsu, ale chcesz, aby adnotacja bezpieczeństwa była stosowana niezależnie od adnotacji. W takim przypadku najlepiej jest opisywać interfejs.

+0

Dokładniej, to @Transactional, który można zastosować do klasy Spring bean, dowolnej z jej metod lub interfejsu lub metod interfejsu, które klasa implementuje, co ma sens w danym momencie. – skaffman

+3

@Alex Nie jestem pewien, czy źle zrozumiałem twoją odpowiedź, ale zgodnie z [to pytanie] (http://stackoverflow.com/questions/4745798/why-java-classes-do-not-inherit-annotations- from-implemented- interfejsy), adnotacje nie są dziedziczone z interfejsów. Czy może odnosisz się raczej do przypisywania nadklas, a nie interfejsów? –

1

Więcej przykładów, ale adnotacje Local i w EJB3. Według doc java,

Kiedy stosowany na interfejsie, który wyznacza interface jako interfejs lokalny biznes .

Domyślam się, że w tym przypadku interfejs ma specjalną funkcję najlepiej oznaczoną adnotacją.

0

Można go użyć do programowania stylu kontraktowego - idź o krok dalej, niż tylko definiowanie interfejsu (typy i nazwy metod), a także zdefiniowanie pewnej semantyki (zawartości typów, warunków wstępnych, warunków końcowych).

Musiałbym sprawdzić się, w jaki sposób działają adnotacje w Javie chociaż, ale te rzeczy można łatwo zrobić z adnotacjami Pythona ...

4

używam findbugs obszernie. Uważam, że użycie parametru annotations do określenia ograniczeń Nullity jest bardzo użyteczne. Nawet jeśli faktycznie nie używasz findbugs, czyni to cel kodu znacznie jaśniejszym. Te adnotacje mają swoje miejsce na interfejsach tak samo, jak klasy. Można twierdzić, że jest to rodzaj programowania na podstawie umowy ...

1

Widziałem wiele narzędzi badawczych wykorzystujących adnotacje metod, aby umożliwić użytkownikom określenie protokołów, ograniczeń itp., Aby ułatwić późniejsze automatyczne sprawdzanie.

Ponieważ adnotacje nie określają, co można z nimi zrobić, nie ma powodu, aby nie zezwalać użytkownikom na dodawanie adnotacji do interfejsów.

4

Nawet bez przykładów powinno być jasne wyjaśnienie - interfejsy opisują zachowanie, podobnie jak adnotacje, więc logiczne jest ich łączenie.

0

Podczas wdrażania aplikacji w JBoss można użyć adnotacji w interfejsie w celu wyeksportowania usługi w konsoli jmx.

0

Użyłem go podczas definiowania interfejsu REST. RESTeasy pozwala na tworzenie REST klienta, który korzysta z uwagami interfejs (RESTInterfaceV1 w tym przykładzie):

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

Chociaż adnotacje muszą być powielane na obiekcie, który faktycznie implementuje interfejs REST, sam interfejs może być dystrybuowany oddzielnie tych, którzy chcą utworzyć klienta REST Java.

0

Oznaczam moje interfejsy za pomocą @Immutable, aby wyraźnie wskazywać twórcom podklas, które musi mieć umowa klasy Mutability implementująca interfejs. Jak mówi gehel, programowanie według umowy.

4

Przypadku użycia, z którym pracuję jest sprawdzania fasoli javax/hibernate, używamy interfejsów, aby pomóc nam w uniknięciu zdefiniowania sprawdzania poprawności dla każdej klasy.

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

public class WebUser implements IUser { 
    private Long userId; 

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