AutoValue with Builders is nice:
Animal dog = Animal.builder()
.setName("dog")
.setNumberOfLegs(4)
.build();
https://github.com/google/auto/blob/master/value/userguide/b...