Предположим следующее:
@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()));