Compile time annotations and compile time annotation processor to generate consistent value object using either abstract class, interface or annotation as a base.
'org.immutables:value:2.0'
<dependency>
<groupId>org.immutables</groupId>
<artifactId>value</artifactId>
<version>2.0</version>
</dependency>
<dependency org="org.immutables" name="value" rev="2.0"/>
"org.immutables", "value", "2.0"