O carregador de classes de definição de uma anotação no nível de classe sempre é um pai do carregador de classes inicial dessa classe?
Suponha o seguinte:
@SomeAnnotation
public interface Foo {
}
Gostaria de saber se é sempre o caso que o carregador de classe definidor deSomeAnnotation
é igual ou pai do carregador de classes inicial deFoo
.
eu liSeção 5.3 da JVMS v8. mas não tenho certeza do que se aplica aqui. A Seção 5.3.4 fala sobre restrições de carregamento, mas elas parecem não se aplicar a anotações.
A pergunta que estou fazendo é porque código como este:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation(SomeAnnotation.class);
falhará na presença de diferentes carregadores de classe. Eu sei que eu poderia usargetAnnotations e procure na matriz resultante um elemento cujo nome da classe seja igual ao nome deSomeAnnotation
. Mas estou pensando se o seguinte também funcionará:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation((Class<? extends Annotation>) fooClass
.getClassLoader().loadClass(SomeAnnotation.class.getName()));