Class ImageSingletons
class or interface
, the value is an instance that
extends that class.
When accessing the registry at run time, the key must be a compile time constant. The
lookup(java.lang.Class<T>)
is performed during native image generation, and the resulting value is put into
the compiled code as a literal constant. Therefore, the actual map that stores the key-value data
is not necessary at run time, and there is no lookup overhead at run time.
ImageSingletons
avoids static fields: instead of filling a static field during native
image generation and accessing it at run time, the value is put into the ImageSingletons
.
Usually, that happens in one of the early initialization methods of a Feature
.
- Since:
- 19.0
-
Method Summary
-
Method Details
-
add
Add a singleton to the registry. The key must be unique, i.e., no value must have been registered with the given class before.- Since:
- 19.0
-
lookup
Lookup a singleton in the registry. The key must be a compile time constant, so that the call to this method can be replaced with the constant configuration objects.The key must have been
added
before, i.e., the result is guaranteed to be non-null
.- Since:
- 19.0
-
contains
Checks if a singleton is in the registry. The key must be a compile time constant, so that the call to this method can be replaced with the constanttrue
orfalse
.The method returns
false
since 19.3.0 when not used in the context of a native image. As such it is safe to write:if (ImageSingletons.contains(MyService.class)) { MyService myService = ImageSingletons.lookup(MyService.class); myService.useMyService(); }
and let such code run fine in the context ofnative image
as well as outside of it.- Since:
- 19.0
-