2013-09-06 12 views
9

Nie wiem, czy pytanie, które zadaję, jest naprawdę głupie. Ale tutaj jest:Adnotacja dotycząca określonego typu danych

Chciałbym napisać adnotację niestandardową, która powinna mieć zastosowanie do określonego typu. Na przykład, jeśli mam klasy A, to ja chciałby mieć adnotację, które mogą być stosowane na obiektach A.

coś takiego:

@Target({ElementType.FIELD, //WHAT_ELSE_HERE_?}) 
public @interface MyAnnotation { 
    String attribute1(); 
} 

public class X { 
    @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE 
    String str; 
    @MyAnnotation (attribute1="..") //PERFECTLY VALID 
    A aObj1; 
    @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE 
    B bObj1; 
} 

Czy to w ogóle możliwe?

+0

Niemożliwe. Ale dlaczego miałbyś to robić? –

+0

Sprawdź sugestię, którą mam dla ciebie, aby osiągnąć to, co chcesz. –

+0

Dzięki NarendraPathai i @ heksafraction. Spodziewałem się tego, ale wciąż optymistycznie myślę, że może być coś poza tym, co wiem. – Mubin

Odpowiedz

8

Niemożliwe. @Target używa ElementType[], a ElementType jest wylicznikiem, więc nie można go zmodyfikować. Nie uwzględnia on tylko niektórych typów pól.

Można jednak odrzucić adnotację w czasie wykonywania lub podnieść wyjątki środowiska wykonawczego.

5

To jest niemożliwe w Javie.

Ale masz możliwość napisania własnego annotation processor, jeśli chcesz sprawdzić poprawność adnotacji przed uruchomieniem.

przetwarzania Adnotacja jest zaczep w procesie zestawiania, analizowanie kodu źródłowego opisów zdefiniowane przez użytkownika i uchwyt, a następnie (po wytwarzania błędów kompilatora ostrzegawcze kompilator emmiting kod źródłowy, kod binarny ..).

A basic tutorial on Annotation Processing.

+0

Mam swój niestandardowy procesor adnotacji, a także odrzucaję adnotację na polach, które mnie nie interesują, ale szukałem, czy jest jakiś inny podejście znacznie prostsze. – Mubin

Powiązane problemy