在运行时获取字段值

发布于 2024-12-10 00:11:54 字数 1346 浏览 0 评论 0原文

如何获取Java Runtime中字段的值?

编辑:

使用这种结构:

    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) {...}
                    } }

当调用f.get(myTarget)时,我得到java.lang.IllegalAccessException,
,< br> 其中,myTarget 是运行时获取的 bean 实例,f 是它的字段。

当在循环中运行以下时:

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

得到字段名称 确定:

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

很奇怪,无法获取该值。

How to get value of the field in Runtime for Java?

EDIT:

using this construction:

    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) {...}
                    } }

I've got java.lang.IllegalAccessException,
when call f.get(myTarget),
where myTarget is the instance of bean got in Runtime and f is its field.

when run in loop following:

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

got field names OK:

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

It's quite strange,that value can't be got.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稚气少女 2024-12-17 00:11:54

arg (在 Javadoc 中称为 obj) 是要操作的实例。在您的示例中,实例是 bd,因此使用 f.getInt(bd) 提取 int 字段等。

arg (called obj in the Javadoc) is the instance on which to operate. In your example, the instance is bd, so use f.getInt(bd) to extract an int field and so on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文