La anotación no se hereda del método de interfaz
Tengo una interfaz con un método anotado. La anotación está marcada con@Inherited
, así que espero que un implementador lo herede. Sin embargo, éste no es el caso:
Código:
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Example {
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
TestInterface obj = new TestInterface() {
@Override
public void m() {}
};
printMethodAnnotations(TestInterface.class.getMethod("m"));
printMethodAnnotations(obj.getClass().getMethod("m"));
}
private static void printMethodAnnotations(Method m) {
System.out.println(m + ": " + Arrays.toString(m.getAnnotations()));
}
}
interface TestInterface {
@TestAnnotation
public void m();
}
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@interface TestAnnotation {}
El código anterior se imprime:
Anotaciones públicas abstractas de vacío. TestInterface.m (): [@ annotations.TestAnnotation ()]
Anotaciones públicas vacías. Ejemplo $ 1.m (): []
Así que la pregunta es ¿por qué no laobj.m()
tener@TestAnnotation
A pesar de que implementa un método marcado con@TestAnnotation
cual es@Inherited
?