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

将pojo字段复制到另一个pojo的setter

贝滨海
2023-03-14

假设我有一个具有公共字段 xy 的类 A。假设我有另一个 pojo 类 B,但它使用 setter 和 getter,所以它有 setX() 和 setY()。

我想使用一些自动方法从A实例复制到B并返回。

至少使用默认设置,推土机的

   Mapper mapper = new DozerBeanMapper();
   B b = mapper.map(a, B.class);

未正确复制字段。

那么,是否有一个简单的配置更改可以让我使用Dozer或其他库来完成上述操作?

共有3个答案

韶兴德
2023-03-14

对于仍在寻找的人,您可以使用Gson试试这个。

Gson gson = new Gson();
Type type = new TypeToken<YourPOJOClass>(){}.getType();
String data = gson.toJson(workingPOJO);
coppiedPOJO = gson.fromJson(data, type);
阎懿轩
2023-03-14

实际上不是一行程序,但这种方法不需要任何lib。

我用这些类来测试它:

  private class A {
    public int x;
    public String y;

    @Override
    public String toString() {
      return "A [x=" + x + ", y=" + y + "]";
    }
  }

  private class B {
    private int x;
    private String y;

    public int getX() {
      return x;
    }

    public void setX(int x) {
      System.out.println("setX");
      this.x = x;
    }

    public String getY() {
      return y;
    }

    public void setY(String y) {
      System.out.println("setY");
      this.y = y;
    }

    @Override
    public String toString() {
      return "B [x=" + x + ", y=" + y + "]";
    }
  }

要获得公共字段,我们可以使用反射,至于setter,最好使用bean utils:

public static <X, Y> void copyPublicFields(X donor, Y recipient) throws Exception {
    for (Field field : donor.getClass().getFields()) {
      for (PropertyDescriptor descriptor : Introspector.getBeanInfo(recipient.getClass()).getPropertyDescriptors()) {
        if (field.getName().equals(descriptor.getName())) {
          descriptor.getWriteMethod().invoke(recipient, field.get(donor));
          break;
        }
      }
    }
  }

测试:

final A a = new A();
a.x = 5;
a.y = "10";
System.out.println(a);
final B b = new B();
copyPublicFields(a, b);
System.out.println(b);

它的输出是:

A [x=5, y=10]
setX
setY
B [x=5, y=10]
黄君博
2023-03-14

我建议你使用:

http://modelmapper.org/

或者看看这个问题:

通过反射将一个类中字段的所有值复制到另一个类中

我会说API(BeanUtils)和ModelMapper都提供了将pojos的值复制到另一个pojos的单行程序。看看@this:

http://modelmapper.org/getting-started/

 类似资料:
  • 问题内容: 我在不同的程序包中有几个Pojo,每个POJO包含同一程序包中另一个Pojo的集合。我需要将所有具有相同名称的项目从Package B Pojos复制到Package A中的对象。 极端: 我想递归地将所有项目从类复制到存在且共享相同名称的类。 更新: 伙计们,我知道这是一个愚蠢的问题,但是我需要维护此代码,现在编写代码时,他们必须调用50个getter和setter或使用50个参数调

  • 我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与

  • 问题内容: 所以我有: 是否有一条sql语句将所有内容从id复制到number? 我将要编写一个php scrip进行选择,然后更新每一行。我的SQL知识很基础,但是我敢肯定有一个聪明的方法可以做到这一点: 背景:ID过去一直是应用程序中显示的数字,并且是唯一的。该数字在我要添加的一些新功能中不再是唯一的-因此我需要将其移动到不唯一的字段中,同时保持旧的完整性。 问题答案: 您可以使用更新语句并引

  • 2.如果用户在excel表格中复制,则应易于复制,即使用户试图在记事本中复制,也应以表格格式打印。 3.添加一些元数据到剪贴板,以确定pojo何时我们将再次导入表。 为了将pojo列表转换为表格格式,我使用了jtable,但无法将所有jtable内容导出到剪贴板。 --pojo.java 当我试图将字符串值复制到剪贴板时,它是工作的,但当我试图复制pojo时,它是不工作的。

  • 这可能吗?我想将JSON反序列化到POJO结构中,但除此之外,还要在POJO(或子POJO)中保存原始JSON的副本。例如,假设我有以下结构: 现在我有一套简单的两个POJO: 除了正确设置pojo字段之外,是否还可以使用类的完整JSON设置中的? 虽然我可以用自定义方法重新创建它,但我没有映射的任何额外JSON字段都会丢失,我想保留这些字段以用于异常日志记录(即,我需要上游系统发送的原始JSON

  • 我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个