【问题标题】:Problem with BeanUtils from Apache来自 Apache 的 BeanUtils 问题
【发布时间】:2011-04-12 20:53:21
【问题描述】:

我正在尝试在 bean 中设置一个属性,但我似乎无法让 BeanUtils 工作...

这是我遇到的问题的一个小例子。

public class Example
{
    public static void main(String[] args)
    {
        Example example = new Example();
        example.run();
    }
    public void run()
    {
        try
        {
            Bean bean = new Bean();
            BeanUtils.setProperty(bean, "name", "myName");
            System.out.println(bean.getName());
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
    private class Bean
    {
        private String name;

        public String getName()
        {
            return name;
        }

        public void setName(String name)
        {
            this.name = name;
        }
    }
}

当我运行它时,我得到一个 InvocationTargetException,说“无法设置名称”另外,当我将属性字符串设置为“名称”时,我没有收到错误,但名称没有设置。

谁能指出我哪里出错了?

【问题讨论】:

    标签: java apache-commons-beanutils


    【解决方案1】:

    去掉 Bean 类的私有属性。由于 BeanUtils 使用反射,它无法访问方法“setName”。你可以正常访问私有内部类的原因是java编译器做了一些特殊的技巧来允许你访问。但是由于 BeanUtils 没有使用这些技巧,所以它不能。

    【讨论】:

    • 让 Bean 类成为它自己的上层类应该可以工作,对吧?
    • 只要它是公共的,或受包保护并且与示例类在同一个包中,是的。
    • 不,那没用,我早先将 bean 类公开并在其自己的 java 文件中...我只是在制作问题的缩短版本以在此处发布时才将其设为私有,而不是发布大量不需要的代码。
    • 我将 Bean 类更改为 public 并做了 java -classpath .:commons-beanutils.jar:commons-logging.jar 示例,它起作用了。
    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多