gpt4 book ai didi

java - 参数化接口(interface)的所有 bean 的编程查找

转载 作者:行者123 更新时间:2023-11-30 10:28:22 24 4
gpt4 key购买 nike

给定类型:

public interface Foo<T, X extends A>{...}

我需要使用编程查找来查找实现给定接口(interface)的 bean,而不考虑参数类型。由于类型安全解析,这将返回一个空集:

final Set<Bean<?>> foos= BeanManagerProvider.getInstance().getBeanManager().getBeans(Foo.class, new AnyLit());

或通过 Deltaspike:

org.apache.deltaspike.core.api.provider.BeanProvider.getDependent(Foo.class, new AnyLit())

AnyLit 在哪里:

private static class AnyLit extends AnnotationLiteral<Any> implements Any
{

}

有什么办法可以解决这个问题吗?

谢谢

最佳答案

我想你可以利用 TypeLiteral - 一个特殊的 CDI 类,可以保存类型及其参数。通过这个,您可以大致以这种方式指定您想要的内容:

TypeLiteral<Foo<Object, Object>> typeLiteral = new TypeLiteral<Foo<Object, Object>>() {};
BeanManager bm; //assuming you can retrieve BM somehow
bm.getBeans(typeLiteral.getType(), new AnyLit());

现在,这(我希望)符合 CDI assignability rules (警告:前面是泛型,阅读前喝杯咖啡)。简而言之,您想使用 Object作为一种类型,以便:

  • 它找到所有其他类型,例如 bar <Bar> (都可以分配给 Object )
  • 参数,例如FooImpl<T> implements Foo<T>也可分配给 Object
  • 它还会找到原始类型的 beans,例如 MyFoo implements Foo

关于java - 参数化接口(interface)的所有 bean 的编程查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44672394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com