Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该在使用lombok时实例化一个字段吗_Java_Spring_Spring Mvc_Lombok - Fatal编程技术网

Java 我应该在使用lombok时实例化一个字段吗

Java 我应该在使用lombok时实例化一个字段吗,java,spring,spring-mvc,lombok,Java,Spring,Spring Mvc,Lombok,我使用lombok省略了javabean的getter和setter。 下面是一个来自《行动中的春天5版》一书的例子 java bean: @Data public class Taco { @Size(min=1, message="You must choose at least 1 ingredient") private List<String> ingredients; } private List<String> ingredients=ne

我使用lombok省略了javabean的getter和setter。 下面是一个来自《行动中的春天5版》一书的例子

java bean:

@Data
public class Taco {

  @Size(min=1, message="You must choose at least 1 ingredient")
  private List<String> ingredients;

}
  private List<String> ingredients=new ArrayList<>();
渲染视图:

<form method="POST">
        <input name="ingredients" type="checkbox" value="FLTO">
        <span>Flour Tortilla</span><br>

        <input name="ingredients" type="checkbox" value="GRBF">
        <span>Ground Beef</span><br>

</form>
验证工作完成后,用户将收到消息:“您必须选择至少一种成分”


但我的问题是:即使我已经使用了lombok,我是否应该实例化一个字段,特别是对于一个引用字段?有没有一种方法可以使用注释来实现它?

您可以定义空构造函数并初始化其中的
列表。Lomboks构造函数将被重写

@Data
public class Taco {

  @Size(min=1, message="You must choose at least 1 ingredient")
  private List<String> ingredients;

  public Taco() {
     ingredients = new ArrayList<>()
  }

}
@数据
公营塔可{
@大小(最小值=1,消息=“您必须选择至少一种成分”)
私人成分清单;
公共塔可{
成分=新的ArrayList()
}
}

您可以定义空构造函数并初始化其中的
列表。Lomboks构造函数将被重写

@Data
public class Taco {

  @Size(min=1, message="You must choose at least 1 ingredient")
  private List<String> ingredients;

  public Taco() {
     ingredients = new ArrayList<>()
  }

}
@数据
公营塔可{
@大小(最小值=1,消息=“您必须选择至少一种成分”)
私人成分清单;
公共塔可{
成分=新的ArrayList()
}
}

但我仍然必须手动完成,为什么lombok不帮我自动完成?lombok只添加构造函数和getter/setter。这些都很直截了当。初始化成员超出了其范围。想想它将如何工作。如果您需要一个
LinkedList
而不是
ArrayList
,该怎么办?如果只需重写构造函数就可以实现,那么用注释实现这一点就太复杂了。但是为什么不按照问题中的建议使用字段初始值设定项呢?应该没有缺点,而且代码更少。静态初始值设定项只在类加载期间运行。将其用于可变类型可能容易出错。字段初始值设定项不是静态初始值设定项。但我仍然必须手动执行此操作,为什么lombok不帮助我自动执行此操作?lombok只添加构造函数和getter/setter。这些都很直截了当。初始化成员超出了其范围。想想它将如何工作。如果您需要一个
LinkedList
而不是
ArrayList
,该怎么办?如果只需重写构造函数就可以实现,那么用注释实现这一点就太复杂了。但是为什么不按照问题中的建议使用字段初始值设定项呢?应该没有缺点,而且代码更少。静态初始值设定项只在类加载期间运行。将其用于可变类型可能容易出错。字段初始值设定项不是静态初始值设定项。这是初始化字段,如果要指定默认值(如空的
ArrayList
),则与Lombok注释一起执行此操作是完全正常的。如果将
@Size
替换为
@NotEmpty
,是否有效?@JanRieke在这种情况下有效,只有一个注释完全符合我的预期。但如果我希望用户选择至少两个项目,我必须同时使用
@NotEmpty
@Size(min=2)
这是在初始化字段,如果你想指定一个默认值(比如一个空的
ArrayList
),那么与Lombok注释结合使用是完全正常的。如果你用
@NotEmpty
替换
@Size
,它能工作吗?@JanRieke在这种情况下工作,只有一个注释完全符合我的预期。但是如果我想让用户选择至少两个项目,我必须同时使用
@NotEmpty
@Size(min=2)