Package io.github.venkateshamurthy.enums
Class DynamicEnum<E extends DynamicEnum<E>>
java.lang.Object
io.github.venkateshamurthy.enums.DynamicEnum<E>
- Type Parameters:
E- a type of self-referential generic.
- Direct Known Subclasses:
Faults
DynamicEnum is a convenience over static
Enum to add dynamically more instances. Please keep the child class
final and keep the child class constructor as private with @Builder from lombok on private constructor.-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final Map<Class<?>,Map<String, DynamicEnum<?>>> Only child classes can access this to make sure avoiding duplicate instances.A map of dynamic enum type to itsObjectMapper. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T extends DynamicEnum<T>>
Collection<? super T>allOf DynamicEnum instances for a given classstatic <T extends DynamicEnum<T>>
com.fasterxml.jackson.databind.ObjectMappergetDefaultMapper(Class<T> clazz) Gets theObjectMappername()Gets the nameintordinal()Gets the ordinal which might be useful to store instance in an array.static <T extends DynamicEnum<T>>
TvalueOf provides the dynamic enum corresponding to the name.static <T extends DynamicEnum<T>>
TvalueOf(@NonNull Class<T> clazz, @NonNull String name, boolean createIfAbsent, Supplier<T> supplier) returns an existingDynamicEnumif not create one using the given supplier.static <T extends DynamicEnum<T>>
T[]values(@NonNull Class<T> clazz, @NonNull IntFunction<T[]> newArrayMaker) values provides DynamicEnum instances array for a given type
-
Field Details
-
instances
Only child classes can access this to make sure avoiding duplicate instances. -
mappers
A map of dynamic enum type to itsObjectMapper.
-
-
Constructor Details
-
DynamicEnum
Constructor- Parameters:
name- should be unique for a given child class type.
-
-
Method Details
-
allOf
public static <T extends DynamicEnum<T>> Collection<? super T> allOf(@NonNull @NonNull Class<T> clazz) allOf DynamicEnum instances for a given class- Type Parameters:
T- type of the dynamic enum- Parameters:
clazz- is the dynamic enum class- Returns:
- collection of dynamic enum instances
-
values
public static <T extends DynamicEnum<T>> T[] values(@NonNull @NonNull Class<T> clazz, @NonNull @NonNull IntFunction<T[]> newArrayMaker) values provides DynamicEnum instances array for a given type- Type Parameters:
T- type of the dynamic enum- Parameters:
clazz- is the dynamic enum classnewArrayMaker- a function to create an array- Returns:
- array of the type
-
valueOf
public static <T extends DynamicEnum<T>> T valueOf(@NonNull @NonNull Class<T> clazz, @NonNull @NonNull String name) valueOf provides the dynamic enum corresponding to the name.- Type Parameters:
T- is basically the <T extends DynamicEnum<T>>- Parameters:
clazz- is the dynamic enum classname- of the dynamic enum for which the corresponding subcclass ofDynamicEnumis to fetched- Returns:
- T
- Throws:
RuntimeException- when name does not match what is cached with in
-
getDefaultMapper
public static <T extends DynamicEnum<T>> com.fasterxml.jackson.databind.ObjectMapper getDefaultMapper(Class<T> clazz) Gets theObjectMapper- Type Parameters:
T- type of <T extends DynamicEnum<T>>- Parameters:
clazz- of the dynamic enum for which the mapper is configured- Returns:
ObjectMapper
-
valueOf
public static <T extends DynamicEnum<T>> T valueOf(@NonNull @NonNull Class<T> clazz, @NonNull @NonNull String name, boolean createIfAbsent, Supplier<T> supplier) returns an existingDynamicEnumif not create one using the given supplier.- Type Parameters:
T- a type of <T extendsDynamicEnum<T>- Parameters:
clazz- DynamicEnum childname- of the dynamic enumcreateIfAbsent- flag whether to create o new one if absentsupplier- to make use when to create a new one- Returns:
- instance of T
-
name
Gets the name- Returns:
- name
-
ordinal
public int ordinal()Gets the ordinal which might be useful to store instance in an array.- Returns:
- ordinal.
-