gpt4 book ai didi

java - 是否可以使用 Commons Beanutils 自动实例化嵌套属性?

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

我正在使用 Apache Commons Bean Utils 的 PropertyUtils.setProperty(object, name, value) 方法:

提供这些类(class):

public class A {
B b;
}

public class B {
C c;
}

public class C {
}

还有这个:

A a = new A();
C c = new C();
PropertyUtils.setProperty(a, "b.c", c); //exception

如果我尝试这样做,我会得到:org.apache.commons.beanutils.NestedNullException:bean 类“class A”上的“b.c”为空属性值

是否可以告诉 PropertyUtils,如果嵌套属性具有 null 值,请在尝试更深入之前尝试实例化它(默认构造函数)?

还有其他方法吗?

谢谢

最佳答案

我通过这样做解决了它:

private void instantiateNestedProperties(Object obj, String fieldName) {
try {
String[] fieldNames = fieldName.split("\\.");
if (fieldNames.length > 1) {
StringBuffer nestedProperty = new StringBuffer();
for (int i = 0; i < fieldNames.length - 1; i++) {
String fn = fieldNames[i];
if (i != 0) {
nestedProperty.append(".");
}
nestedProperty.append(fn);

Object value = PropertyUtils.getProperty(obj, nestedProperty.toString());

if (value == null) {
PropertyDescriptor propertyDescriptor = PropertyUtils.getPropertyDescriptor(obj, nestedProperty.toString());
Class<?> propertyType = propertyDescriptor.getPropertyType();
Object newInstance = propertyType.newInstance();
PropertyUtils.setProperty(obj, nestedProperty.toString(), newInstance);
}
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
}
}

关于java - 是否可以使用 Commons Beanutils 自动实例化嵌套属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877729/

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