CDI 中是否可以注入通用接口实现?

Dim*_* K. 5 cdi jakarta-ee

我正在尝试创建一个类似于以下内容的类型转换器:

public interface ConvertToString<T> {
    String convert (T value);
}

public class ConvertLongToString implements ConvertToString<Long> {
    @Override
    public String convert (Long value) {
        return value.toString();
    }
}

public class Foo<T> {
    @Inject
    @Any
    private Instance<ConvertToString<T>> instance;

    private T value;

    public String getValue() {
        return instance.get().convert(value);
    }

    public void setValue(T value) {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,我希望 的 实例Foo<Long>知道如何通过注入正确的转换器来转换值。

是否可以像我所展示的那样使用 CDI,甚至通过迭代实例列表来实现?

我想要构建类似于 Bean Validation 框架的东西,您可以在其中为多种类型创建相同注释的验证器(当然您有...... @ValidatedBy)

小智 0

泛型是一个编译时构造,不存在使其适用于运行时注入所需的信息,类型擦除只会破坏整个事情......天哪,我尝试过 Spring 吗?