假设我们有一个这样定义的对象A:
public class ObjectA {
private Attribute a1;
private Attribute a2;
private Attribute a3;
}
出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性:
public class ObjectB {
private Attribute a1;
private Attribute a2;
}
所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B...
多谢了:)
编辑:我一直被一个“另一个问题的可能重复”提醒:如何在Java中复制一个对象?
我的问题在某种程度上略有不同,我处理的是两个不同的对象,它们只是拥有相同的属性,但并不完全相同!
您需要的是对象映射器。试试Orika或Dozer。对象不必是同一类型。在映射时,如果找到相同名称和类型的属性,则会自动映射。
MapperFacade mapper = mapperFactory.getMapperFacade();
UserDTO userDTO = new UserDTO();
userDTO.setName("xyz");
..
User user = mapper.map(userDTO, User.class);
如果必须映射不同的属性名称,也可以进行自定义。
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(UserDTO.class, User.class)
.field("name", "username")
.byDefault().register();
mapper = mapperFactory.getMapperFacade();
...
User user = mapper.map(userDTO, User.class);
要详细说明我的评论:
使用推土机,它可以像以下一样简单:
Mapper mapper = new DozerBeanMapper();
ObjectA source = new ObjectA();
ObjectB target = mapper.map(source , ObjectB.class);
或者如果您的目标类没有无参数构造函数:
ObjectA source = new ObjectA();
ObjectB target = new ObjectB(/*args*/);
mapper.map(source, target );
来自文档(我强调):
执行Dozer映射后,结果将是目标对象的新实例,其中包含与源对象具有相同字段名的所有字段的值。如果任何映射的属性具有不同的数据类型,Dozer映射引擎将自动执行数据类型转换。
试试像Dozer或BeanUtils这样的库
问题内容: 在Python中,是否有一个库方法可在同一类的两个(已经存在)实例之间复制所有属性? 我的意思是,类似Apache Commons的东西 问题答案: 如果您的班级未修改或出于特殊属性访问目的,则所有属性都存储在其中,因此您可以执行以下操作: 如果使用python属性,则应查看并筛选出要复制的属性。
这是我的代码: 我想将的值设置为,我该怎么做?我试过,
我有两个java类如下 现在我有了一个A级对象Aobj,两个字段都已初始化。我用的是小豆子。copyProperties(Bobj,Aobj),但只有字段值被复制到Bobj中。名称列表为空。有没有办法深度复制一个对象,以便它复制所有字段,包括列表、地图等集合。 我在某个地方听说了推土机,不确定这是否是为了这个目的。
我有一个包含对象的数组,它们是反应组件上的道具 我想抓住第一个物体的细节,因为它是 我可以这样做: 如何获取所有剩余的键和值,并将它们存储在组件状态中?
问题内容: 见下课 假设我创建了一个父对象,如下所示 根据上面的代码注意,birthDate属性为null。现在我只想将非null属性从父对象复制到另一个对象。就像是 我需要它,因为我想更新anotherParent对象而不用null值覆盖其非null值。 你知道这样的帮手吗? 我是否接受最少的代码作为答案,是否不介意使用助手 问候, 问题答案: 我想您已经有了解决方案,因为自您提出要求以来已经发
本文向大家介绍如何让一个对象具有私有属性?相关面试题,主要包含被问及如何让一个对象具有私有属性?时的应答技巧和注意事项,需要的朋友参考一下 Symbol 生成的每个值都是独一无二的 用 Symbol 作 key 值 无论是 for in 或 for of都遍历不到 只能用Object.getOwnPropertySymbols 才可以遍历到