Używałem AOP Guice'a do przechwytywania niektórych wywołań metod. Moja klasa implementuje interfejs i chciałbym dodać adnotacje do metod interfejsu, aby Guice mógł wybrać odpowiednie metody. Nawet jeśli typ adnotacji jest adnotowany przy użyciu klasy implementującej Inherited adnotation, nie dziedziczy adnotacji, jak określono w dokumencie java Inherited:
Należy również zauważyć, że ta meta-adnotacja powoduje, że adnotacje są dziedziczone tylko z nadklas; adnotacje na zaimplementowanych interfejsach nie mają żadnego wpływu.
Co mogłoby być tego przyczyną? Zapoznanie się ze wszystkimi interfejsami, które klasa obiektu implementuje w środowisku wykonawczym, nie jest trudną rzeczą do zrobienia, więc musi być dobry powód takiej decyzji.
źródło
The field value is ambiguous.
błędu kompilatora podobnego do typu, podobnie jak w przypadku dwóch interfejsów deklarujących tę samą stałą z różnymi wartościami. Wiem, że to nie jest pole, ale wszystkie wartości adnotacji są rozwiązywane w czasie kompilacji, prawda? Funkcja, której tu brakuje, byłaby bardzo pomocna w wielu przypadkach. Swoją drogą, przepraszam za przywrócenie starego posta :).Foo
adnotację (MyClass
nie ma jej, wtedy interfejsy są przeszukiwane i pobierane w kolejności, w jakiej są poimplements
) i dlatego wypisuje "baz". Chłodny.Z Javadoc dla @Inherited:
Z drugiej strony, walidatory JSR 305 wykonują pewnego rodzaju wyszukiwanie dziedziczenia. Jeśli masz hierarchię klas:
Wtedy skuteczne walidacje na
Student.getAge()
są@Nonnull @Min(5)
.@Nonnull
nie ma@Inherited
meta-adnotacji.źródło
@Inherited
nie ma to wpływu na nic innego niż klasa