我想使用Reflections库来获取实现具有特定注释值的管理器的类。
我写的代码是这样的:
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;
}
}
管理器是一个接口(interface)。 SubType 是实现 Manager 的类,例如产品经理/办公室经理
我正在寻找任何使用注释 @Service(name=name) 实现它的类。
这一切正常,直到线路返回(经理)clazz。我得到:
java.lang.ClassCastException: java.lang.Class cannot be cast to com.mycompany.manager.Manager
出了什么问题?在检查中我可以看到 clazz 的类型是实现 Manager 的 ProductManager
最佳答案
您无法将 Class
对象强制转换为该类的实例。我不确定这确实是您想要做的,但您可以从 Class
对象创建一个实例。
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) ((Class<?>) clazz).newInstance();
}
return null;
}
关于java - 泛型无法将 Object 转换为接口(interface)类 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815558/