LoginSignup
4
4

More than 5 years have passed since last update.

LombokのAccessorsアノテーションとJSONICではまった話。

Last updated at Posted at 2015-02-06

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は使いましょう。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4