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

标签 java lombok

我正在编写一个简单的模型,如下所示。我可以在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/

相关文章:

java - Spring Controller中调用请求 Action 时写入日志

java - 如何指定 Jackson 反序列化的默认值

java - 露天工作流程分配不起作用

java - 随机化字符串数组并显示所有值

spring - SLF4J : Failed toString() invocation on an object of type lombok

java - 如何制作调用其他注解的注解

android-layout - 有什么方法可以将 Android 与 Lombok 访问器绑定(bind)?

java - 在 OWASP 编码器中允许 '/' 通过使用 encodeForHTML 方法

java - 如何降低这部分代码的复杂性?

java - 安卓 : Using Broadcasting Receiver