Могу ли я добавить новые поля в классе, используя отражение - PullRequest
8 голосов
/ 15 сентября 2011

Могу ли я добавить новое поле в класс, если у меня есть его литеральный объект класса, и как я могу определить, что конкретный класс ссылается или используется в литерале этого класса?

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Вы не можете напрямую добавить новое поле к объекту Class.Есть сторонние API, которые вы можете использовать для генерации или модификации классов (например, ASM, BCEL), хотя их лучше избегать, потому что они добавляют много сложности.

Что касается второй части вашеговопрос, вы можете использовать объект Class, чтобы пройти через поля и изучить их.

// NOTE : this only looks at the fields in A and not it's superclass.
//        you'll have to do a recursive lookup if you want super's fields too.
for(Field field : A.class.getDeclaredFields()) {
    if(B.class.equals(field.getType()) {
        System.out.println("A." + field.getName() + " is of type B");
    }
}
1 голос
/ 10 сентября 2013

Вы не указываете, для чего вам нужна эта функция, но, возможно, вы захотите рассмотреть JAXB, если хотите придерживаться Java: вы объявляете свой класс Java как XML, и он генерируется динамически. Может быть, это поможет.

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