Używam AOP Guice do przechwytywania niektórych wywołań metod. Moja klasa implementuje interfejs i chciałbym opisać metody interfejsu, aby Guice mógł wybrać właściwe metody. Nawet jeśli typ adnotacji jest opatrzone Inherited adnotacja realizacji klasę nie dziedziczy adnotację, jak określono w Inherited Java Doc:Dlaczego klasy java nie dziedziczą adnotacji z zaimplementowanych interfejsów?
Należy również zauważyć, że w tym meta-adnotacja powoduje jedynie adnotacje być dziedziczone z nadrzędnych; adnotacje na zaimplementowanych interfejsach nie działają.
Jaki może być tego powód? Zapoznanie się z wszystkimi interfejsami, które klasa obiektu implementuje w środowisku wykonawczym, nie jest trudną rzeczą, więc decyzja musi być uzasadniona.
adnotacje na interfejsach są przydatne tylko wtedy, gdy posiadasz framework, który je obsługuje.BTW w tym przykładzie getAnnotation() zwraca null;) –
Nie wiem, ludzie. W tym przypadku (gdyby nie było literówki), spodziewałbym się, że wartość pola jest niejednoznaczna. Podobnie jak w przypadku dwóch interfejsów deklarujących tę samą stałą o różnych wartościach. Wiem, że to nie jest pole, ale wartości adnotacji są rozwiązywane podczas kompilacji, prawda? Funkcja, której tu brakuje, byłaby bardzo pomocna w wielu przypadkach. Przepraszam, że przywracam stary post, nawiasem mówiąc :). –
@Slanec przyjrzyj się źródłom Springa, aby przekonać się, jak ludzie z zespołu Spring pracowali nad tymi problemami. Zobacz [AnnotationUtils.findAnnotation (method, annotationType)] (http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-core/3.1.1.RELEASE/org/springframework/core/ adnotacja/AnnotationUtils.java # AnnotationUtils.findAnnotation% 28java.lang.reflect.Method% 2Cjava.lang.Class% 29) –