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

2024-01-06

我在用着PropertyUtils.setProperty(对象、名称、值)Apache Commons Beanutils 的方法:

开设这些课程:

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 类“A 类”上“b.c”的 Null 属性值'

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

还有其他方法吗?

谢谢


我通过这样做解决了这个问题:

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 Commons Beanutils 自动实例化嵌套属性? 的相关文章

随机推荐

  • 列表中的元素测试

    对于我正在编写的样式表 实际上是一组样式表 每个样式表生成不同的输出格式 我需要评估某个值是否存在于值列表中 在这种情况下 正在测试的值取自元素的属性 要测试的列表来自样式表的调用 并被视为顶级
  • C 中的对齐属性 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 SO 中看到了很多关于对齐属性
  • SASS 和@font-face

    我有以下 CSS 我如何在 SASS 中描述它 我尝试用 css2sass 反向编译它 但不断收到错误 这是我的 CSS 可以工作 吗 font face font family bingo src url bingo eot src lo
  • React:“重定向”未从“react-router-dom”导出

    我在运行时收到以下错误npm run start在终端中 尝试导入错误 重定向 未从 react router dom 导出 我已经重新安装了node modules react router dom react router 还重新启动了
  • 什么是 CUDA 上下文?

    谁能解释一下或者给我推荐一些关于什么是 CUDA 上下文的好资料 我搜索了 CUDA 开发者指南 但对它并不满意 任何解释或帮助都会很棒 cuda API 公开了有状态库的功能 两个连续的调用彼此相关 简而言之 上下文就是它的状态 The
  • iOS:如何将 MKMapPoint 或 CLLocationCooperative2D 转换为 UTM?

    根据我的阅读 这需要一些我不擅长的复杂数学 所以 我在这里问 有人有将 MKMapPoint 或 CLLocationCooperative2D 转换为 UTM 值的经验吗 我找到了这个资源 http www uwgb edu dutchs
  • 什么是 csv 文件以及如何使用 java 代码解析它? [复制]

    这个问题在这里已经有答案了 可能的重复 快速 CSV 解析 https stackoverflow com questions 6857248 fast csv parsing 如何正确地将 CSV 文件解析为二维数组 https stac
  • 了解非阻塞 Web 服务调用与非阻塞 JDBC 之间的区别

    我试图从概念上理解为什么在 Play Framework 2 0 中 调用被认为是最佳实践WS url get 对于 Web 服务调用 但是如果您将任何其他阻塞调用 例如 JDBC 调用 包装在 Promise 中 是否建议您在默认执行上下
  • Python - 根据这些值拟合 GEV 分布

    我对 Python 很陌生 我在互联网上浏览过 但找不到任何可以帮助我解决问题的逻辑 我在图中有降水值 现在我需要根据图中的这些值拟合 GEV 分布 每个值等于从 1974 年到 2017 年的一年的最大值 因此总共有 43 个值 这些是值
  • 如何通过 Firebase 设置自定义身份验证声明并识别平台

    我正在关注 firebase 文档here https firebase google com docs auth extend with blocking functions setting custom and session clai
  • 如何读取msmq消息(我,不是电脑)

    我想查看队列内部 msm 控制台管理单元有此属性对话框 但很难阅读 并且对我来说重要的消息被编码 如下所示 3C 3F 78 6D 6C 20 76 65 3C 65 73 62 3A 6D 65 73
  • Python:如何处理子类中的类型提示?

    我有一个基类Base和一个子类Sub 我还有另外两门课BaseMember and SubMember BaseMember 后者是前者的子类 现在我只想让基类输入其函数返回的提示BaseMember 对象 而子类具有返回的函数SubMem
  • 如何找到我所在域名的简称?

    我想返回我正在运行的计算机的域的短名称 我不想要 env USERDOMAIN因为这是用户登录的域 可能与计算机所在的域不同 如果我这样做 gwmi win32 computersystem Domain 这让我获得了 FQDN 但我想要类
  • 无法找到模块“mscorwks.dll”

    我尝试使用 winDBG 来调试转储文件 当我运行 loadby sos mscorwks dll 时 它给了我一条错误消息 无法找到模块 mscorwks dll 有没有人见过这个 如果您正在调试 NET 4 0应用程序 您需要使用以下内
  • 检查手机上的互联网连接

    我想检查我的手机是否可以连接互联网 我已经看到几个问题了 其中之一是Question https stackoverflow com questions 13617017 windows phone 8 connection handler
  • 如何在控制台应用程序中设置默认连接字符串?

    在我的带有 Web 界面的 MVC 项目中 我习惯在 Web Config 文件中设置连接字符串 但是 现在我正在制作一个沼泽标准控制台应用程序 也带有数据库挂钩 但如何为应用程序全局设置连接字符串 目前 我正在设置 var dbIndex
  • 当为结构体分配 null 值时,CLR 如何绕过抛出错误?

    我试图理解这段代码中的一件事 Nullable
  • 从 Azure 连接到 HTTPS Web 服务

    我在 Azure 中有一个 Web 角色 必须连接到受 SSL 保护的外部 Web 服务 当应用程序尝试连接到 Web 服务时 会出现错误 无法建立 SSL TLS 安全通道的信任关系 具有权限 certname organization
  • WMI - 直接访问 Win32_OperatingSystem 的单例实例

    我无法直接访问Win32 操作系统通过 WMI 公开的管理类 它是一个单例类 我非常确定 Win32 OperatingSystem 是获取单例实例的正确路径语法 对 InvokeMethod 的调用会产生问题底部列出的异常 访问 Clas
  • 是否可以使用 Commons Beanutils 自动实例化嵌套属性?

    我在用着PropertyUtils setProperty 对象 名称 值 Apache Commons Beanutils 的方法 开设这些课程 public class A B b public class B C c public c