Является ли определяющий загрузчик классов аннотации уровня класса всегда родителем инициирующего загрузчика классов этого класса?
Предположим следующее:
@SomeAnnotation
public interface Foo {
}
Я хотел бы знать, всегда ли это так, что либо определяющий загрузчик классовSomeAnnotation
равно или родитель инициирующего загрузчика классовFoo
.
я прочиталJVMS v8 раздел 5.3, но я не уверен, что здесь применимо. Раздел 5.3.4 говорит об ограничениях загрузки, но они, кажется, не применяются к аннотациям.
Вопрос, который я задаю, заключается в следующем:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation(SomeAnnotation.class);
потерпит неудачу при наличии разных загрузчиков классов. Я знаю, что мог бы использоватьgetAnnotations и искать в результирующем массиве элемент, имя класса которого равно имениSomeAnnotation
, Но мне интересно, будет ли работать следующее:
Class<?> fooClass = //will in some way obtain a reference to class Foo
fooClass.getAnnotation((Class<? extends Annotation>) fooClass
.getClassLoader().loadClass(SomeAnnotation.class.getName()));