在 Java 类的构造过程中,成员变量的初始化顺序先于构造器的执行

在 Java 类的构造过程中,成员变量的初始化顺序先于构造器的执行

@AllArgsConstructor
public class OAPushDataService {

    private final AliOssProperties aliOssProperties;
    private final ProjectService projectService;
    private final SeeYonOaApiUtils oaApiService;
    private final SeeYonOaApiProperties oaApiProperties;
    private final EmployeeService employeeService;
    private final String visitUrl = aliOssProperties.getVisitUrl();

在 Java 类中,当你使用 @AllArgsConstructor 注解时,Lombok 会自动为你生成一个包含所有 final 字段的构造器。然而,你遇到的问题是在字段声明的同时尝试使用这些字段来初始化其他字段。在 Java 类的构造过程中,成员变量的初始化顺序是先于构造器的执行。这意味着在构造器内部赋值之前,你尝试使用 aliOssProperties 来初始化 visitUrl,此时 aliOssProperties 还没有被初始化,因此编译器会报错,指出 “可能尚未初始化变量aliOssProperties”。

要解决这个问题,有几个选项:

1. 在构造器中初始化 visitUrl
你可以不在字段声明时初始化 visitUrl,而是在构造器中进行初始化。如果你使用 Lombok,可以手动编写构造器,或者使用 Lombok 的 @PostConstruct 方法来设置 visitUrl。

    @PostConstruct
    public void init() {
        visitUrl = aliOssProperties.getVisitUrl();
    }

2. 使用 Lombok 的 @Getter(lazy=true) 注解
另一种方法是延迟 visitUrl 的初始化,让 Lombok 在首次访问时才进行计算。

    @Getter(lazy = true)
    private final String visitUrl = aliOssProperties.getVisitUrl();
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值