【问题标题】:Is there anything to set value in objects based on a path?有什么可以根据路径在对象中设置值吗?
【发布时间】:2014-01-27 10:37:59
【问题描述】:

我需要的是以下内容:

Person p = new Person();
Command.set(p, "person.name", "William");
//After that method call in line above, p.getName() should return "William"

而且我需要尽可能通用的 set 方法,也就是说,不仅是 person 参数,而且是我想要的任何 ValueObject。 我开始使用反射来研究这个算法,但我不确定它是否适合并且它需要做很多工作。不知道有没有什么已经做了,比如Java框架。

提前致谢!

【问题讨论】:

  • 这是一个购物清单问题,对于这个平台来说不是一个好问题。你应该使用你最喜欢的搜索引擎。 JXPath 是应该出现的。另请参阅dont-ask 帮助页面。

标签: java reflection set setvalue


【解决方案1】:

看看来自 Apache Commons Beanutils (http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.1/apidocs/org/apache/commons/beanutils/PropertyUtilsBean.html#setProperty%28java.lang.Object,%20java.lang.String,%20java.lang.Object%29) 的 PropertyUtilsBean。

应该很简单:

Person p = new Person();
PropertyUtils.setProperty(p, "name", "William");

库也支持设置嵌套属性,例如

PropertyUtils.setProperty(p, "address.street", "Route 69");
// equivalent of p.getAddress().setStreet("Route 69")

【讨论】:

  • 谢谢,就是这样!尽管嵌套属性直到此刻才起作用。
【解决方案2】:

它看起来确实有点像Dozer 所做的。然而推土机用于将 A 类映射到 B 类。例如这个推土机映射:

<mapping>
  <class-a>org.dozer.vo.deep.SrcDeepObj</class-a>
  <class-b>org.dozer.vo.deep.DestDeepObj</class-b>

  <field>
    <a>srcNestedObj.src1</a>
    <b>dest1.firstObj.secondObj.destVar</b>
  </field>
</mapping>

相当于:

destinationObject.getDest1().getFirstObj.getSecondObj.setDestVar(inputObject.getSrcNestedObj().getSrc1());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-23
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多