当前位置: 首页 > 知识库问答 >
问题:

JAVA-如何将一个对象的属性复制到另一个具有相同属性的对象?

梁晋鹏
2023-03-14

假设我们有一个这样定义的对象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中复制一个对象?

我的问题在某种程度上略有不同,我处理的是两个不同的对象,它们只是拥有相同的属性,但并不完全相同!

共有3个答案

傅穆冉
2023-03-14

您需要的是对象映射器。试试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);
鲁浩渺
2023-03-14

要详细说明我的评论:

使用推土机,它可以像以下一样简单:

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映射引擎将自动执行数据类型转换。

景轶
2023-03-14

试试像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 才可以遍历到