gpt4 book ai didi

java - objectmapper 如何转换为我的对象,它是否创建了新实例

转载 作者:行者123 更新时间:2023-11-30 06:01:35 24 4
gpt4 key购买 nike

我有我的对象:

public class MyObject {
private final String name;
private final int age;
public MyObject(String name, int age) {
this.name = name;
this.age = age;
}
// getter, NOT setter here
}

我收到来自kafka的消息,并转换为MyObject:

import com.fasterxml.jackson.databind.ObjectMapper;
....
MyObject myObject = objectMapper.convertValue(kafkaMessage.getData(), MyObject.class);

ObjectMapper 是否使用 MyObject 的构造函数创建了 MyObject 的新实例?

MyObject myObject = new MyObject("name", 12);

如果没有,ObjectMapper 如何为最终字段设置值?因为MyObject只有构造函数,没有setter。

最佳答案

也许吧。

这实际上取决于您使用的框架。映射器可以使用多种可能的策略:

  • 调用无参数(默认)构造函数,然后调用 setter 方法。或者直接访问类的字段来更改它们。
  • 识别一个匹配的构造函数并传入参数,加上上面的内容。

如上所述,选择哪种策略取决于框架。事实上这对你来说并不重要。此类框架的全部要点是为您序列化(去)信息,而不用担心细节。

有关更多详细信息,请开始阅读此处的 documentation .

(为了完整起见:根据我对 JSON 解析的了解,我认为 Jackson 使用启发式方法来识别匹配的构造函数和 setter 方法。而像 gson 这样的库则期望默认(无参数)构造函数,然后使用反射扫描字段,并直接更新它们)

关于java - objectmapper 如何转换为我的对象,它是否创建了新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com