Lombok:RequiredArgsConstructor 不起作用

问题描述 投票:0回答:7

似乎

@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

出于某种原因,它似乎确实适用于其他未定义构造函数但使用

@RequiredArgsConstructor
注释的域类。

java lombok
7个回答
60
投票

根据文档, 必需的参数是最终字段和带有@NonNull 等约束的字段。

您需要将用户名设置为@NonNull

@NonNull private String username;

你也需要将它们定为最终版本。


15
投票

对于未来的读者来说,还值得注意的是,@Data还提供了@RequiredArgsConstructor,因此没有必要使用这两个注释:)


5
投票

你在IntelliJ中安装了Lombok插件吗?

如果没有的话

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

重新启动IDE,应该就可以修复了。

双重检查:

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

4
投票

@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;

3
投票

尝试将项目/模块 JDK 更改为 1.8。

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


2
投票

@RequiredArgsConstructor 注释的参数字段必须是

final
。所以这个修复会起作用:

private final String username;

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


0
投票

如果所有 lombok 注释都不起作用,请尝试从 lombok 下载“安装程序”(您必须指出您的 IDE 在哪里),这解决了我的问题 这是java的安装程序 https://projectlombok.org/setup/javac

© www.soinside.com 2019 - 2024. All rights reserved.