Получить значения полей во время выполнения - PullRequest
1 голос
/ 13 октября 2011

Как получить значение поля в Runtime for Java?

EDIT:

используя эту конструкцию:

    ClassPathScanningCandidateComponentProvider scanner =
 new ClassPathScanningCandidateComponentProvider(
                    false);
        for (BeanDefinition bd : scanner
        .findCandidateComponents("aspectlogging"))
                        {
            Class myTarget = null;
                try {
                        myTarget = Class.forName(bd.getBeanClassName());
                     }
                       catch (ClassNotFoundException e) {...}
                for (Field f:myTarget.getDeclaredFields()){
                        try {
                            System.out.println("FIELD: " + f.get(myTarget));
                            } catch (IllegalArgumentException e) {...} 
                              catch (IllegalAccessException e) {...}
                    } }

У меня есть java.lang.IllegalAccessException,
при вызове f.get(myTarget),
, где myTarget - это экземпляр компонента, полученного во время выполнения, а f - его поле.

при выполнении в цикле:

System.out.println("FIELD: " + f);

получил имена полей ОК:

FIELD: private java.lang.String aspectlogging.TestableBean.name
FIELD: private java.lang.String aspectlogging.TestableBean.name

Это довольно странно, это значение не может быть получено.

1 Ответ

1 голос
/ 13 октября 2011

arg (, называемый obj в Javadoc ) - это экземпляр для работы.В вашем примере это bd, поэтому используйте f.getInt(bd) для извлечения поля int и т. Д.

...