Annotation Type Memoized
-
@Documented @Retention(CLASS) @Target(METHOD) public @interface Memoized
Annotates methods in@AutoValue
classes for which the generated subclass will memoize the returned value.Methods annotated with
@Memoized
cannot:- be
abstract
(except forAnnotation.hashCode()
andAnnotation.toString()
),private
,final
, orstatic
- return
void
- have any parameters
If you want to memoize
Annotation.hashCode()
orAnnotation.toString()
, you can redeclare them, keeping themabstract
, and annotate them with@Memoized
.If a
@Memoized
method is annotated with an annotation whose simple name isNullable
, thennull
values will also be memoized. Otherwise, if the method returnsnull
, the overriding method will throw aNullPointerException
.The overriding method uses double-checked locking to ensure that the annotated method is called at most once.
Example
@AutoValue
abstract class Value { abstract String stringProperty();@Memoized
String derivedProperty() { return someCalculationOn(stringProperty()); } }@Generated
class AutoValue_Value { // … private volatile String derivedProperty;Override
String derivedProperty() { if (derivedProperty == null) { synchronized (this) { if (derivedProperty == null) { derivedProperty = super.derivedProperty(); } } } return derivedProperty; } } - be