java - BeanUtils 不适用于链 setter

标签 java reflection chaining apache-commons-beanutils lombok

例如

class tester
{
    @Test
    public void testBeanUtils() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException
    {
        Stranger stranger = new Stranger();
        BeanUtils.setProperty(stranger,"name","wener");
        BeanUtils.setProperty(stranger,"xname","xwener");
        BeanUtils.setProperty(stranger,"yname","ywener");

        System.out.println(stranger);
    }
    @Data// lombok annotation generate all setter and getter
    public static class Stranger
    {
        @Accessors(chain = true)// generate chained setter
        String name;
        String xname;
        String yname;

        public Stranger setYname(String yname)// no lombok, still not work
        {
            this.yname = yname;
            return this;
        }
    }
}

我的输出:

TestValues.Stranger(name=null, xname=xwener, yname=null)

这是怎么回事?链条安装器是个好东西。 有什么建议吗?

编辑

再次回到这个问题。这次我不能删除Accessors chain。 现在,我使用commons-lang3来实现。

// force access = true is required
Field field = FieldUtils.getField(bean.getClass(), attrName, true);
field.set(bean,value);

对于那些遇到同样问题的人。

最佳答案

您可以使用FluentPropertyBeanIntrospector 实现:

“BeanIntrospector 接口(interface)的实现,可以检测在流畅的 API 场景中使用的属性的写入方法。”

https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/FluentPropertyBeanIntrospector.html

PropertyUtils.addBeanIntrospector(new FluentPropertyBeanIntrospector());
BeanUtils.setProperty( this.o, "property", "value" );

关于java - BeanUtils 不适用于链 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22743765/

相关文章:

java - 可扩展枚举 Java

java - 在 if 语句中检查数组的两个返回值

c# - 查找虚方法的原始实现

javascript - 在 Javascript 中提取方法链?

java - 使用过滤器和 Map 链接 Java Reactor Mono

java - JOGL:使用 Component.printAll() 在 JFrame 中截取 GLCanvas 的屏幕截图不起作用

java - 从一个文件读取,导出到另一个文件

reflection - 如何通过类名将对象拆箱成实际对象

python - 无法使用 Python 中的检查通过 exec 获取方法 "declared"的源代码

javascript - 延迟的 promise 链不起作用