Immutables库为何不对集合属性执行必填校验?
问题原因解析
这是Immutables库的默认行为:
- 对于单值类型(比如你代码里的
String bar()),默认是必填属性,构建时必须显式设置,否则会抛出"required attributes are not set"的错误。 - 对于集合类型(比如
List<String> baz()),Immutables会自动为其生成空的不可变集合作为默认值,就算你没显式调用.baz()设置值,构建时也会自动填充空集合,因此不会触发必填校验。
如果想让集合属性也变成必填,可以通过@Value.Parameter注解标记,或者在@Value.Immutable中配置allParameters = true,强制所有抽象方法对应的属性都为必填项。比如修改定义:
@Value.Immutable(allParameters = true) public abstract class Foo { public abstract String bar(); public abstract List<String> baz(); }
这样不管是bar还是baz,构建时都必须显式设置,否则都会报错。
内容的提问来源于stack exchange,提问作者Isaac Kleinman
相关产品推荐
相关产品推荐

