- * It makes the class final, makes all its methods static, creates a private default constructor that throws a RuntimeException when called and yields an error when other constructors are defined. + * An annotation to create utility classes. + * + * If a class is annotated with {@code @UtilityClass}, the following things happen to it:
+ @UtilityClass was introduced as an experimental feature in lombok v1.16.2.
+
+ Experimental because: +
+ A utility class is a class that is just a namespace for functions. No instances of it can exist, and all its members
+ are static. For example, java.lang.Math and java.util.Collections are well known utility classes. This annotation automatically turns the annotated class into one.
+
+ A utility class cannot be instantiated. By marking your class with @UtilityClass, lombok will automatically
+ generate a private constructor that throws an exception, flags as error any explicit constructors you add, and marks
+ the class final. If the class is an inner class, the class is also marked static.
+
+ All members of a utility class are automatically marked as static. Even fields and inner classes.
+
+ There isn't currently any way to create non-static members, or to define your own constructor. If you want to instantiate
+ the utility class, even only as an internal implementation detail, @UtilityClass cannot be used.
+
onMethod= / onConstructor= / onParam=@UtilityClass