我正在使用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
如何解决这个问题,还是有更好的方式来做我正在做的事情?
答案 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