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

标签 java generics

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

相关文章:

java - 如何使用 Jackson 将对象转换为具有前导零的整数字段的 JSON?

java - Java 中的 T 和继承

java - 使用泛型java进行android数据绑定(bind)

java - c#模型抽象和泛型,像Java一样强制转换未知泛型

java - 2维表,为什么出现NullPointerException

java - 在每种情况下都使用具有一系列值的 switch 语句?

java - 检查 String ArrayList 中的多个特定整数/字母

java - 隐式反馈情况下的 Mahout 推荐

kotlin - 获取具体化泛型类型的具体化类型参数kclass

c# - 通用类型列表