Lombok @Wither、@Value、@NoArgsConstructor、@AllArgsConstructor 不能一起工作

Lombok @Wither, @Value, @NoArgsConstructor, @AllArgsConstructor do not work together

我正在写一个简单的模型如下。我可以在 intellij 结构视图中看到凋零函数。但是编译器抱怨 "variable field1 might not have been initialized"

@Wither
@Value
@NoArgsConstructor
@AllArgsConstructor
public class MyModel {
    String field1;
    String field2;
}

如果我初始化字段,我就看不到凋零函数了。这里会发生什么?

documentation 开始:

@Value@Data 的不可变变体;默认情况下,所有字段都是私有的和最终的,并且不会生成设置器。


因此 String field1 变为 final String field1

因为你也在使用 @NoArgsConstructor Java 编译器抱怨 "variable field1 might not have been initialized",这是真的,因为在代码的某个地方你可以做

MyModel model = new MyModel();

并且由于构造函数没有初始化任何字段,Java 抱怨。

来自 Final (Java) 维基:

final 变量只能通过初始化程序或赋值语句初始化一次。它不需要在声明时初始化:这称为 "blank final" 变量。 class 的空白最终实例变量必须在声明它的 class 的每个构造函数中明确分配;同样,必须在声明它的 class 的静态初始值设定项中明确分配空白最终静态变量;否则,两种情况都会出现 compile-time 错误。


这正是你的情况。

你可以用@Data代替@Value,其他部分都是一样的。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyModel {
    String field1;
    String field2;
}