我认为要使用Reflections库来获取实现具有特定注释值的管理器的类。泛型不能将对象转换为接口类java
我写了这样的代码:
public enum Reflection {
INSTANCE;
Reflection() {
managersRef = new Reflections("com.company.manager");
}
private final Reflections managersRef;
public Manager getManagerImplWithName(String name, Class<? extends Manager> subType) {
Set<?> managers = managersRef.getSubTypesOf(subType);
for (Object clazz : managers) {
Service serviceAnno = ((Class<?>) clazz).getAnnotation(Service.class);
if (serviceAnno != null && !StringUtils.isEmpty(serviceAnno.name()) && serviceAnno.name().equals(name))
return (Manager) clazz;
}
return null;
}
}
管理器是一个接口。 SubType是实现Manager的类,例如ProductManager/OfficeManager
我正在寻找任何使用注释@Service(name = name)实现它的类。
这工作正常,直到线返回(经理)clazz。我得到:
java.lang.ClassCastException: java.lang.Class cannot be cast to com.mycompany.manager.Manager
什么问题?在检查中,我可以看到clazz的类型是ProductManager,它实现了管理器
你没有给我们足够的细节来解决这个问题。什么是'managersRef'? “getSubTypeOf”方法在哪里声明? –
我编辑了代码。思考是https://code.google.com/p/reflections/ – Dejell
我相信,你想要一个'Manager'的实例,但是你拥有的是一个'Class'对象。 – qqilihq