Java检查Interface实现是否是特定实现的对象

时间:2018-04-19 08:02:47

标签: java spring-boot

我正在使用Spring Boot自动发送通用类型列表。

处理器是一个接口,其所有实现都是自动装配的。

我需要该接口的特定实现,我正在使用一个方法,该方法将采用Implementation类类型并返回自动装配的相应实现。

@Autowired
private List<Processor> processorsList; //Autowiring all implementation of Processor

// Return an autowired instance of a particular implementation
private Processor getProcessor(Class<? extends Processor> cls) {
    for (Processor p: processorsList)
        if (p instanceof cls) // getting compilation error here
            return p;
    return null;
}

我在这里收到编译错误:Uknown class:cls

如何解决这个问题,还是有更好的方式来做我正在做的事情?

2 个答案:

答案 0 :(得分:0)

动态等效于instanceOf的编译错误:Class.isInstance(Object object)

@Autowired
private List<Processor> processorsList; //Autowiring all implementation of Processor

// Return an autowired instance of a particular implementation
private Processor getProcessor(Class<? extends Processor> cls) {
    for (Processor p: processorsList)
        if (cls.isInstance(p))  return p;
    return null;
}

谨防潜在的NPE

答案 1 :(得分:0)

您可以按照此链接完美地限制使用instanceOf [不能使用具有参数化类型的Cast或instanceof]

因为Java编译器会删除通用代码中的所有类型参数,所以无法验证在运行时使用泛型类型的参数化类型: https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#cannotCast