gpt4 book ai didi

java - 泛型无法将 Object 转换为接口(interface)类 java

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:04 24 4
gpt4 key购买 nike

我想使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com