Boh*_*ian 7 java constructor initialization lombok
我正在使用lombok并尝试最小化代码。这是我在香草Java中的(人为)情况:
public class MyClass {
private final int x;
private final int sqrt;
public MyClass(int x) {
this.x = x;
sqrt = (int)Math.sqrt(x);
}
// getters, etc
}
Run Code Online (Sandbox Code Playgroud)
但是我想使用lombok生成构造函数和获取方法:
@Getter
@RequiredArgsConstructor
public class MyClass {
private final int x;
private int sqrt;
}
Run Code Online (Sandbox Code Playgroud)
为了使计算进入类,您可以考虑一个实例块:
{
sqrt = (int)Math.sqrt(x);
}
Run Code Online (Sandbox Code Playgroud)
但是实例块是在构造函数中的代码执行之前执行的,因此x尚未初始化。
sqrt = (int)Math.sqrt(x); 在 x分配了构造函数参数后,是否有一种方法可以执行,但仍使用由生成的构造函数RequiredArgsConstructor?
笔记:
@Getter)final字段以及几个计算/派生的字段,因此使用lombok可以节省大量样板@PostConstruct)均无用小智 6
如何使用lazy@Getter上的选项进行计算:
// tested and works OK
@Getter(lazy = true)
private final int sqrt = (int) Math.sqrt(x);
Run Code Online (Sandbox Code Playgroud)
注意:调用getSqrt()按预期/希望的方式工作,触发计算并设置“最终”字段,但是直接访问该字段不会调用魔术-您会获得未初始化的值。
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |