Отражение Java (и аннотации): bean.class пуст - PullRequest
0 голосов
/ 11 июля 2010

Я создаю простой Java-бин с 4 атрибутами, getter / setter и некоторыми избыточными методами, такими как toString, equals и hashCode.

Над каждым атрибутом есть пользовательская аннотация:

import java.lang.annotation.*;
import java.lang.annotation.RetentionPolicy;

@Target(ElementType.FIELD)
@Retention( RetentionPolicy.RUNTIME )
public @interface DAOProperty {

    String name();
    String type();
    boolean identifier() default false;

}

/** The id. */
@DAOProperty(name = "id", type = "long", identifier = true)
private long id;

Если я передам bean.class другому методу

generateEntity(User.class);

...

private static MEntity generateEntity(Class<?> bean) {...}

и отладить его, кажется, пусто, кроме имени класса. Все массивы, такие как методы, аннотации и поля, имеют нулевой размер.

Где я ошибся?

Ответы [ 2 ]

0 голосов
/ 12 июля 2010

Не смотрите на внутренние поля класса. Они не актуальны для вас. Единственное, что вас должно заинтересовать - это возвращаемые значения методов. Весьма вероятно, что java.lang.Class использует эти поля для хранения информации, которая создается по запросу.

В этом случае просмотр полей объекта Class во время выполнения не покажет вам правильные значения (по крайней мере, не всегда). Однако проверка возвращаемых значений нужных методов должна дать правильные значения.

0 голосов
/ 11 июля 2010

Используйте beanClass.getDeclaredFields() вместо getFields().Затем выполните итерацию массива и для каждого Field вызова getAnnotations()

getFields() (и аналогичных методов) возвращаются только открытые члены.

В любом случае, почемуразве вы не используете JPA вместо создания собственных аннотаций и процессоров аннотаций?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...