我認爲要使用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