龙目岛:RequiredArgsConstructor 不工作

Lombok: RequiredArgsConstructor is not working

似乎 @RequiredArgsConstructor 在下面的代码中不起作用。为什么会这样?

import java.io.Serializable;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data
@RequiredArgsConstructor
public class User implements Serializable {

    private String username;

    /*public User(String username) {
        this.username = username;
    }*/

    private static final long serialVersionUID = 8043545738660721361L;
}

我收到错误:

javax.faces.el.EvaluationException: java.lang.Error: Unresolved compilation problem: 
    The constructor User(String) is undefined

出于某种原因,它似乎确实适用于其他域 class,其中没有定义构造函数,而是使用了 @RequiredArgsConstructor 注释。

根据Documentation, 必需的参数是最终字段和带有约束的字段,例如 @NonNull.

您需要将用户名设为@NonNull

@NonNull private String username;

而且您还需要将它们设为最终版本。

对于未来的读者来说,@Data also provides @RequiredArgsConstructor 也值得注意,因此没有必要同时使用这两个注释:)

您是否在 IntelliJ 中安装了 Lombok 插件?

如果没有那么

File -> Settings -> Plugins: Search for Lombok (CodeStream) version.

重新启动IDE,应该可以解决。

仔细检查:

  • 您使用 Maven 或 Gradle 安装了 Lombok 库。
  • 已启用 Annotation Processors 来自 IntelliJ IDE 来自 File -> Settings: Search for Annotation Processors

尝试将 project/module JDK 更改为 1.8。

项目结构->项目设置->项目SDK和项目语言级别

@RequiredArgsConstructor 注释的参数字段必须是 final。所以此修复程序将起作用:

private final String username;

IDE IntelliJ 在 final 关键字丢失时将变量设为灰色(非活动状态),这对检测此类错误非常有帮助。

@RequiredArgsConstructor

> Generates a constructor with required arguments. Required arguments
 are final fields and fields with constraints such as @NonNull.
> Complete documentation is found at the project lombok features page
for @Constructor.
> Even though it is not listed, this annotation also has the
 *`onConstructor`* parameter. See the full documentation for more details.

龙目岛图书馆

要使用 @RequiredArgsConstructor,变量必须是 final,它会自动在构造函数中创建值

private final String username;