gpt4 book ai didi

java - BeanUtils 不适用于链 setter

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:03:09 24 4
gpt4 key购买 nike

例如

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com