如果我理解@Value.Immutable
正确,您应该使用表示要生成的字段的方法在类或接口上对其进行注释。例子:
@Value.Immutable
public interface Entity {
int getAge();
String getName();
}
这意味着将生成以下内容:
@Generated(from = "Entity", generator = "Immutables")
public final class ImmutableEntity implements Entity {
private final int age;
private final String name;
private ImmutableEntity(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int getAge() {
return age;
}
@Override
public String getName() {
return name;
}
(...)
}
如果您不遵循该getXXXXX()
模式,您将得到一个不同的生成类,如下所示:
@Value.Immutable
public interface Entity {
int age();
String name();
}
有了这个,您将获得以下生成的类:
@Generated(from = "Entity", generator = "Immutables")
public final class ImmutableEntity implements Entity {
private final int age;
private final String name;
private ImmutableEntity(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int age() {
return age;
}
@Override
public String name() {
return name;
}
(...)
}
注意差异。在第一个中,您有普通的 getter,在第二个中,您有“getters” get
,方法名称中没有前缀。Javax Validation 使用普通的 getter 来获取数据,以便对其进行验证。在第二个生成的类中,getter 不遵循通常的命名约定,因此 Javax 验证不起作用。