I’m trying to write a generic enum producer;every injection point declare a different enum-type and value is resolved againts a set of values declared elsewhere (not so important).
I’m stuck writing generic enum @Produces
:
@ApplicationScoped
class MyBean {
@Inject
@EnumProperty
MyEnum myEnumProperty;
@Inject
@EnumProperty
AnotherEnum anotherEnumProperty;
}
@Qualifier
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EnumProperty {
@Nonbinding
public String name() default "";
}
@ApplicationScoped
public GenericEnumProducer {
@Produces @EnumProperty
Enum enumProducer(InjectionPoint ip) {
Field f = (Field) injectionTarget;
Class<Enum<?>> enumClass = (Class<Enum<?>>) f.getType();
return getPropertyFromSystemAndConvertToEnum();
}
@Produces @EnumProperty
Object objectEnumProducer(InjectionPoint ip) {
Field f = (Field) injectionTarget;
Class<Enum<?>> enumClass = (Class<Enum<?>>) f.getType();
return getPropertyFromSystemAndConvertToEnum();
}
@Produces @EnumProperty
<T extends Enum<?>> T genericEnumProducer(InjectionPoint ip) {
Field f = (Field) injectionTarget;
Class<Enum<?>> enumClass = (Class<Enum<?>>) f.getType();
return getPropertyFromSystemAndConvertToEnum();
}
}
I have compilation-time exceptions
Producer method java.lang.Enum<?>
genericEnumProducer(jakarta.enterprise.inject.spi.InjectionPoint ip)
declared on class MyBean$GenericEnumProducer
contains a parameterized type with a wildcard. This type is not a
legal bean type according to CDI specification.
or
Unsatisfied dependency for type
MyBean$MyEnum and qualifiers
[@EnumProperty]
- injection target: MyBean#value
- declared on CLASS bean [types=[MyBean, java.lang.Object], qualifiers=[@Default, @Any],
target=MyBean]
Any advice?