¿El cargador de clases definitorio de una anotación de nivel de clase es siempre un padre del cargador de clases iniciador de esa clase?
Supongamos lo siguiente:
@SomeAnnotation
public interface Foo {
}
Me gustaría saber si siempre es el caso que el cargador de clases definitorio deSomeAnnotation
es igual o un padre del cargador de clases iniciador deFoo
.
he leídoJVMS v8 sección 5.3. pero no estoy seguro de qué se aplica aquí. La Sección 5.3.4 habla sobre las restricciones de carga, pero parece que no se aplican a las anotaciones.
La pregunta que hago es porque un código como este:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation(SomeAnnotation.class);
fallará en presencia de diferentes cargadores de clases. Sé que podría usargetAnnotations y busque en la matriz resultante un elemento cuyo nombre de clase sea igual al nombre deSomeAnnotation
. Pero me pregunto si lo siguiente también funcionará:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation((Class<? extends Annotation>) fooClass
.getClassLoader().loadClass(SomeAnnotation.class.getName()));