DevOps / Apache Groovy Interview questions
What is the difference between @Immutable and a manually written immutable class?
@Immutable is an AST transformation that automatically generates an immutable class from a simple property declaration list - final fields, a suitable constructor, equals/hashCode/toString, and defensive copying for mutable-looking property types like collections - all without writing that boilerplate by hand.
A manually written immutable class requires writing all of that yourself: declaring every field final, writing a constructor that assigns them, implementing equals/hashCode/toString consistently, and remembering to defensively copy any mutable-looking fields on the way in and out, each of which is an easy place to introduce a subtle bug if done manually and inconsistently.
The tradeoff is customization: @Immutable's generated behavior follows fixed conventions, so a class needing unusual construction logic, non-standard equality semantics, or special handling not covered by its defaults may still need to be hand-written instead.
More Related questions...