首页 > 解决方案 > 为什么无法使用@Tolerate lombok 在构造函数内部进行任何初始化甚至打印?

问题描述

lombok的@Tolerate的构造函数有什么问题,为什么无法达到?我该如何解决?我想通过在构造函数块中设置一些默认键和值来初始化地图,但它不能被初始化,因为在构造函数中什么都不能到达。你能帮帮我吗?谢谢你。

import java.util.HashMap;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Tolerate;
import lombok.ToString;

@Data
@ToString(includeFieldNames = true)
@Builder
public class A {

    @Builder.Default private HashMap<Integer, Double> map = new HashMap<>();

   @Tolerate
   public A() {
  //          System.out.println("Print to Test 1: ");
      super();
    
    //INTIALIZING MAP WITH DEFAULT VALUE AND KEY
    System.out.println("Print to Test 2: ");
    map.put(47, 0.8);
    map.put(87, 0.9);
    System.out.println("Print to Test 3: ");
    
  }


    public double getValue(int x, int key) {
  
      System.out.println("test 1: " + map); 

      return x * map.get(key);
  }
}

输出:

测试 1:{}

标签: javaconstructorhashmaplombok

解决方案


@Builder不使用无参数构造函数,它使用全参数构造函数。如果您希望您的构建器使用您自己的构造函数,请手动实现一个全参数构造函数,但不要使用它进行注释@Tolerate(否则 Lombok 会尝试生成另一个,这将导致编译错误)。


推荐阅读