isAnnotationPresent () возвращает false при использовании со ссылкой на супертип в Java

Я пытаюсь получить детали аннотации из ссылочной переменной супертипа, используя отражение, чтобы метод принимал все подтипы. Но isAnnotationPresent () возвращает false . То же самое с другими методами, связанными с аннотациями. Если используется точный тип, результат будет таким, как ожидалось.

Я знаю, что аннотационная информация будет доступна для объекта, даже если я ссылаюсь на супертип.

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Table {
    String name();
}
@Table(name = "some_table")
public class SomeEntity {

    public static void main(String[] args) {
        System.out.println(SomeEntity.class.isAnnotationPresent(Table.class)); // true
        System.out.println(new SomeEntity().getClass().isAnnotationPresent(Table.class)); // true

        Class<?> o1 = SomeEntity.class;
        System.out.println(o1.getClass().isAnnotationPresent(Table.class)); // false

        Class<SomeEntity> o2 = SomeEntity.class;
        System.out.println(o2.getClass().isAnnotationPresent(Table.class)); // false

        Object o3 = SomeEntity.class;
        System.out.println(o3.getClass().isAnnotationPresent(Table.class)); // false
    }
}

Как получить информацию об аннотации?

6
задан manikanta 29 September 2011 в 14:40
поделиться