【问题标题】:Lombok: RequiredArgsConstructor is not working龙目岛:RequiredArgsConstructor 不工作
【发布时间】:2016-06-07 05:50:35
【问题描述】:

似乎@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


    【解决方案1】:

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

    您需要将用户名设为@NonNull

    @NonNull private String username;
    

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

    【讨论】:

    • 还有final 字段!不要忘记final 字段。 final 领域往往得不到太多的爱(故意重复 =D)
    • 如果您已经使用过 final 和/或 @NonNull,请尝试使用手动构造函数来帮助缩小问题范围。可以在这里找到调试策略:janac.medium.com/…
    【解决方案2】:

    还值得注意的是,@Data 还提供了@RequiredArgsConstructor,因此不需要同时使用这两个注释:)

    【讨论】:

    • 当您将@Data@NoArgsConstructor 等其他构造函数注释结合使用时,@RequiredArgsConstructor 将不会自动生成。
    【解决方案3】:

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

    如果不是那么

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

    重新启动 IDE,它应该是固定的。

    双重检查:

    • 您已使用 Maven 或 Gradle 安装了 Lombok 库。
    • File -> Settings: Search for Annotation Processors 的 IntelliJ IDE 启用 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;
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 这确实有帮助,即使切换回 14 后错误也消失了
      【解决方案6】:

      @RequiredArgsConstructor 注释的参数字段必须是final。所以这个修复会起作用:

      private final String username;
      

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

      【讨论】:

        猜你喜欢
        • 2021-03-05
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        • 2011-08-31
        • 2017-01-15
        • 2018-04-25
        • 2016-06-20
        • 2018-03-29
        相关资源
        最近更新 更多