public final class ImageSingletons extends Object
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
ImageSingletons.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
Usually, that happens in one of the early initialization methods of a
|Modifier and Type||Method and Description|
Add a singleton to the registry.
Checks if a singleton is in the registry.
Lookup a singleton in the registry.
public static <T> void add(Class<T> key, T value)
public static <T> T lookup(Class<T> key)
The key must have been
added before, i.e., the result is guaranteed to be non-
public static boolean contains(Class<?> key)
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:
... some snippets found in org/graalvm/nativeimage/test/ImageSingletonsTest.javaand let such code run fine in the context of
native imageas well as outside of it.