You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Main类未用new运算符实例化AddressDto的实现方式及关联问询

Main类中未使用new获取AddressDto对象的原理

这不是通过关联关系实现的,AddressDto对象的实例化全程都在ApiService内部完成,Main类只是接收了方法返回的现成实例而已,具体过程分两个关键环节:

1. ApiService类的成员变量初始化(被后续覆盖)

在ApiService类中,定义了成员变量:

AddressDto addressDto = new AddressDto();

当你在Main类中执行new ApiService()时,这个成员变量会被自动实例化。不过这个实例在后续getEndereco方法的执行中,会被Jackson创建的新实例覆盖,不是最终返回给Main的那个对象。

2. Jackson通过反射创建AddressDto实例(最终返回的对象)

getEndereco方法中,核心的实例化逻辑在这行代码:

addressDto = mapper.readValue(response.body(), AddressDto.class);

ObjectMapper.readValue方法内部会通过Java反射机制完成AddressDto的实例化:

  • 调用AddressDto的无参构造器(如果没显式定义,Java会自动生成默认无参构造)创建对象
  • 将接口返回的JSON字符串中的字段值,逐个填充到这个新创建的对象中
  • 把填充好的AddressDto对象赋值给成员变量,再通过方法返回给Main类

Main类中的变量赋值逻辑

Main类里的这行代码:

AddressDto addressDto = apiService.getEndereco("03107040");

只是把ApiService方法返回的已实例化完成的对象赋值给本地变量,并没有触发新的实例化操作,所以不需要写new关键字。

内容的提问来源于stack exchange,提问作者Vini dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:05:12