LombokのAccessor(chain=true)アノテーションを使うと、生成されるsetterがthisを返すようになり、
いわゆる「流れるようなインターフェース」を実現できます。
@Accessors(chain=true)
@Data
class Person{
int age;
String name;
}
Person p1 = new Person()
.setAge(10)
.setName("namae");
大変便利ですが、これはbeanの仕様からは外れてしまっています。そのため、上記のクラスは
JSONICでのデコードに失敗します。
@Accessors(chain=true)
@Data
class Person{
int age;
String name;
}
class Sample {
public static void main(String[] args) {
Person p1 = new Person()
.setAge(10)
.setName("namae");
String s = JSON.encode(p1);
Person p2 = JSON.decode(s, Person.class);
System.out.println(String.format("p1.name=[%s]", p1.name); // p1.name=[namae]
System.out.println(String.format("p2.name=[%s]", p2.name); // p2.name=[null]
}
}
というわけで、使う場所を考えながら、Accessorは使いましょう。