遇到带有限定符和泛型的cdi无法正常工作的情况。
例如,我有这样的界面:
public interface SomeInterface<T> {
T someMethod(Set<T> set);
}
它的实现(以及带有其他限定符的其他几种实现):
@SomeQualifier
public class SomeClass implements SomeInterface<AnotherClass> {
AnotherClass someMethod(Set<AnotherClass> set) {...some logic...}
}
还有一些这样的限定词:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
public @interface SomeQualifier {}
因此,当我将其注入到某个bean中时(在我的项目中为单个):
@Singleton
@Startup
public class SomeSingleton {
@Inject
@SomeQualifier
SomeInterface instance;
..usage...
}
我在部署过程中遇到异常
Unsatisfied dependencies for type SomeInterface with qualifiers @SomeQualifier
但是当我在不使用泛型的情况下使用所有这些功能时,一切正常!
尝试这样注入:
@Inject
@SomeQualifier
SomeInterface<AnotherClass> instance;
得到了相同的结果。
知道如何将Inject与限定符和泛型一起使用吗?
最佳答案
您的第一种方法不起作用的原因是因为您违反了CDI spec assignability rules(第一行)。简而言之,注入原始类型仅适用于未绑定/ Object
类型。
但是,第二种方法确实可行-我刚刚在Weld SE中进行了验证。例如。:
@Inject
@SomeQualifier
SomeInterface<AnotherClass> instance;
我想您可能忘记了重新编译代码或其他内容?再次检查,因为我确定这是可行的。那,或者您在代码中还有其他问题。
关于java - 不能对包含泛型的接口(interface)使用限定符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44648675/