我正在使用Spring,但对它的所有功能并不熟悉。寻找将字段从一个Java对象实例复制到另一个对象实例的好方法。我已经看到了如何将属性从一个Java bean复制到另一个Java bean?但我要找的是更具体的,所以下面是详细信息:
假设我有两个类P的实例,源
P source;
P target;
List<string> properties;
//source, target are populated. properties is {"a", "b"}
//Now I need some Spring (SpEL?) trick to do the equivalent of:
target.setA(source.getA());
target.setB(source.getB());
我不认为SpEL需要这里,它可以用BeanUtils解决。copyProperties(对象、对象、字符串…)。根据您的示例,如果您的类具有属性“a”、“b”、“c”,并且您只想复制前两个,可以这样调用它
BeanUtils.copyProperties(source, target, "c");
希望它有帮助!
Field[] fields = source.getClass().getDeclaredFields();
for (Field f: fields) {
if (properties.contains(f.getName())) {
f.setAccessible(true);
f.set(destination, f.get(source));
}
}
以下是一些关于反思的教程:
http://www.oracle.com/technetwork/articles/java/javareflection-1536171.html
http://tutorials.jenkov.com/java-reflection/index.html
但是要小心,Reflection有特定的用例。
BeanWrapper srcWrap = PropertyAccessorFactory.forBeanPropertyAccess(source);
BeanWrapper destWrap = PropertyAccessorFactory.forBeanPropertyAccess(destination);
properties.forEach(p -> destWrap.setPropertyValue(p, srcWrap.getPropertyValue(p)));
Spring BeanWrapper的例子归功于:https://stackoverflow.com/a/5079864/6510058
假设我们有一个这样定义的对象A: 出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性: 所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B... 多谢了:) 编辑:我一直被一个“另一个问题的可能重复”提醒
问题内容: 我有一个简单的Java POJO,可以将属性复制到同一POJO类的另一个实例。 我知道我可以使用BeanUtils.copyProperties()做到这一点,但我想避免使用第三方库。 那么,如何简单,正确,安全地做到这一点呢? 顺便说一句,我正在使用Java 6。 问题答案: 我想如果您查看BeanUtils的源代码,它将向您展示如何在不实际使用BeanUtils的情况下执行此操作。
问题内容: 在Python中,是否有一个库方法可在同一类的两个(已经存在)实例之间复制所有属性? 我的意思是,类似Apache Commons的东西 问题答案: 如果您的班级未修改或出于特殊属性访问目的,则所有属性都存储在其中,因此您可以执行以下操作: 如果使用python属性,则应查看并筛选出要复制的属性。
问题内容: 见下课 假设我创建了一个父对象,如下所示 根据上面的代码注意,birthDate属性为null。现在我只想将非null属性从父对象复制到另一个对象。就像是 我需要它,因为我想更新anotherParent对象而不用null值覆盖其非null值。 你知道这样的帮手吗? 我是否接受最少的代码作为答案,是否不介意使用助手 问候, 问题答案: 我想您已经有了解决方案,因为自您提出要求以来已经发
好的,在做任何事情之前,我想提一下,这是为学校准备的,所以请不要编写任何代码来修复我的代码,因为这不会教我任何东西。相反,如果我使用了不正确的术语,我需要的是参考、解释和适当的术语。 所以我这里有一些问题。这是我需要做的, *在学生类中包括以下方法:a.第B1部分中每个实例变量的访问器(即getter)b.第B1部分中每个实例变量的mutator(即setter) 注意:对Student类的实例变
我必须用不同的键和值将rest模板响应映射到我的DTO。目前我正在从rest api获得这个json响应 我想将其映射到我的 DTO 中,以便能够保存到数据库中 我想要的是只获得相同的动态密钥,以匹配上述api的响应。目前我正在这样做,但似乎我没有设置相同键的正确值。 执行此操作后,我的数据库中出现空值。