Run code only once!
Project hosted on github: https://github.com/claudemartin/LockOnce
It’s just one single utility class to make sure code is run only once. And then there’s another one for easy “Lazy Initialization”.
I once wrote this for Java 7 but now it needs Java 8. It makes much more sense to use this with Lambdas. It’s a bit like the lazy keyword of Scala.
// declaration of lazy field:
final Supplier<Foo> lazy = Lazy.of(() -> ...);
// Access to the data:
Foo foo = lazy.get();
You can also register a “destructor”. This solves the problem that such fields (they are usually static final
) are never GCd and finalizers are utterly useless. In the same way you can have resources (they just have to implement AutoClose
) closed on shutdown.