我正在编写一个简单的模型,如下所示。我可以在intellij结构 View 中看到wither函数。但编译器提示“变量 field1 可能尚未初始化”
@Wither
@Value
@NoArgsConstructor
@AllArgsConstructor
public class MyModel {
String field1;
String field2;
}
如果我初始化字段,我就不会再看到凋零函数。这里可能发生什么?
最佳答案
来自 documentation :
@Value
是 @Data
的不可变变体;默认情况下,所有字段都是私有(private)的和最终的,并且不会生成 setter 。
因此,String field1
变为final String field1
。
由于您也在使用 @NoArgsConstructor
Java 编译器提示“变量 field1 可能尚未初始化”,这是事实,因为您可以在代码中的某个位置执行
MyModel model = new MyModel();
由于构造函数没有初始化任何字段,Java 会提示。
来自Final (Java)维基百科:
最终变量只能通过初始化程序或赋值语句初始化一次。它不需要在声明时初始化:这称为“空白最终”变量。类的空白最终实例变量必须在声明它的类的每个构造函数中明确分配;类似地,空白的最终静态变量必须在声明它的类的静态初始值设定项中明确分配;否则,这两种情况都会出现编译时错误。
<小时/>这正是您的情况所发生的情况。
关于java - Lombok @Wither、@Value、@NoArgsConstructor、@AllArgsConstructor 不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49235876/