Finally! Hassle-free final local variables.
val was introduced in lombok 0.10.
NEW in Lombok 1.18.22:
val gets replaced with
You can use
val as the type of a local variable declaration instead of actually writing the type. When you do this, the type will be inferred from the initializer expression. The local variable will also be made final. This feature works on local variables and on foreach loops only, not on fields. The initializer expression is required.
val is actually a 'type' of sorts, and exists as a real class in the
lombok package. You must import it for val to work (or use
lombok.val as the type). The existence of this type on a local variable declaration triggers both the adding of the
final keyword as well as copying the type of the initializing expression which overwrites the 'fake'
WARNING: This feature does not currently work in NetBeans.
Supported configuration keys:
error] (default: not set)
Lombok will flag any usage of
valas a warning or error if configured.
For compound types, the most common superclass is inferred, not any shared interfaces. For example,
bool ? new HashSet() : new ArrayList() is an expression with a compound type: The result is both
AbstractCollection as well as
Serializable. The type inferred will be
AbstractCollection, as that is a class, whereas
Serializable is an interface.
In ambiguous cases, such as when the initializer expression is
java.lang.Object is inferred.