当前位置: 首页 > 知识库问答 >
问题:

Lombok:@必需的ArgsConstructor从最终创建构造函数,但不是从@NotNull创建

刘成礼
2023-03-14

我试图用@RequiredArgsConstructor创建一个基本配方类,但Lombok似乎没有正确创建所需的args构造函数。虽然它将成功创建其他构造函数,例如@allargsconstuctor,但即使我使用@NotEmpty/@NotNull注释了值,所需的args构造函数也是空的。我已仔细检查是否已导入RequiredArgsConstructor

这是我的课程的精简版本:

@RequiredArgsConstructor
public class Recipe
{
    @NotEmpty
    String name;

    @NotNull
    ArrayList<Ingredient> ingredients;

    @NotNull
    ArrayList<String> steps;

    // Time in mins
    int time;

    String creator;
}

Lombok创建的构造函数是空的,我在构建的类文件中签入了它。

请注意,当我在类中使@NotNull字段为最终字段时,Lombok将创建适当的所需args构造函数:

public Recipe(String name, ArrayList<Ingredient> ingredients, ArrayList<String> steps) {
        this.name = name;
        this.ingredients = ingredients;
        this.steps = steps;
    }

因此,它似乎忽略了@NotNull注释。我将感谢任何关于我可能在这里做错了什么的指导。谢谢你!

共有1个答案

柯易安
2023-03-14

我错误地解释了项目Lombok留档,它说“所有未初始化的最终字段都获得一个参数,以及任何标记为@NonNull但在声明位置未初始化的字段。”

我认为@NonNull是指从javax中标记为@NotNull或等效项的任何字段。验证。限制。NotNull/NotEmpty,而实际上它的字面意思是@NonNull来自lombok。非空

 类似资料:
  • @adilooze解决方案

  • 我学到了两件事: -操作符创建一个新实例,然后执行声明的connstuctor来初始化该新实例 根据我的理解,这些说法互相反对。 例如,不会创建两个实例,因为-操作符创建一个实例,构造函数调用并创建另一个实例?当然不会,但现在到底是什么创建了一个实例。。。?

  • 问题内容: 我想我需要反射包才能做到这一点。说我有一个像这样的结构: 说我想生成ResolutionValue结构的JSON表示…是否有某种方法可以创建不实例化的JSON表示? 问题答案: 即使使用反射,也需要使用实际值来获取类型。因此,我建议您只使用类型的零值。

  • 我在nodeJS中有一个主要的谷歌云功能。在这个函数中,我希望通过编程在同一个项目中创建另一个云函数。这个新的云函数的代码可以存储在谷歌云存储的zip文件中。我试着跟着这里的导游走:https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions/create 我能够在测试模拟器中运行查询,

  • 我想让我的子组件有一个ref,但是我不希望用户在创建组件时必须指定ref。所以说我有这样的东西: 我希望父组件能够访问子组件的状态。最简单的方法是为每个组件添加一个ref,但我希望这是在函数中完成的,以便从最终用户那里抽象出它,因为我希望这些组件被通用化。 有没有一种干净的方法可以让父组件访问子组件的状态,例如当创建子组件时,您有以下内容: 因此,在父类内部,我可以执行以下操作: 因此,我希望能够

  • -----编辑----- 这个问题Docker映像和容器之间有什么区别?没有回答我的问题。 我的问题是:为什么我们需要从图像而不是从DockerFile创建容器?首先从Dockerfile创建映像,然后再创建容器的目的/好处是什么?