Badam adnotacje i doszedłem do punktu, w którym niektóre adnotacje wydają się mieć hierarchię między nimi.
Używam adnotacji do generowania kodu w tle dla kart. Istnieją różne typy kart (a więc inny kod i adnotacje), ale są pewne elementy, które są między nimi wspólne, takie jak nazwa.
@Target(value = {ElementType.TYPE})
public @interface Move extends Page{
String method1();
String method2();
}
I to byłaby wspólna adnotacja:
@Target(value = {ElementType.TYPE})
public @interface Page{
String method3();
}
W powyższym przykładzie spodziewałbym się, że Move odziedziczy method3, ale pojawia się ostrzeżenie, że extends nie jest poprawne w przypadku adnotacji. Próbowałem, aby adnotacja była rozszerzeniem wspólnej bazy, ale to nie działa. Czy to w ogóle możliwe, czy tylko kwestia projektu?
java
inheritance
annotations
javydreamercsw
źródło
źródło
Odpowiedzi:
Niestety nie. Najwyraźniej ma to coś wspólnego z programami, które odczytują adnotacje w klasie bez ich ładowania. Zobacz Dlaczego nie można rozszerzać adnotacji w języku Java?
Jednak typy dziedziczą adnotacje swojej nadklasy, jeśli te adnotacje są
@Inherited
.Ponadto, jeśli nie potrzebujesz tych metod do interakcji, możesz po prostu ułożyć adnotacje w swojej klasie:
Czy jest jakiś powód, dla którego nie zadziała?
źródło
Możesz dodać adnotację do adnotacji bazowej zamiast dziedziczenia. Jest to używane w ramach Spring .
Dać przykład
Następnie możesz sprawdzić, czy klasa jest opatrzona adnotacją za
Vehicle
pomocą AnnotationUtils Springa :Ta metoda jest implementowana jako:
AnnotationUtils
zawiera również dodatkowe metody wyszukiwania adnotacji w metodach i innych elementach z adnotacjami. Klasa Spring jest również wystarczająco potężna, aby przeszukiwać metody mostkowane, serwery proxy i inne przypadki narożne, szczególnie te napotkane w Spring.źródło
TYPE
lubANNOTATION_TYPE
.Oprócz odpowiedzi Grygoriys z adnotacjami.
Możesz sprawdzić np. Metody zawierające
@Qualifier
adnotację (lub adnotację opatrzoną adnotacją@Qualifier
) za pomocą tej pętli:Zasadniczo robisz to, aby uzyskać wszystkie adnotacje obecne w metodzie, a z tych adnotacji otrzymasz ich typy i sprawdź te typy, jeśli są adnotowane @Qualifier. Aby ta adnotacja działała, również musi być włączona opcja Target.Annotation_type.
źródło
Sprawdź https://github.com/blindpirate/annotation-magic , czyli bibliotekę, którą opracowałem, gdy miałem to samo pytanie.
źródło