java - 如何动态转换 Java 对象

标签 java class reflection reflections

我有以下方法:

public static Category getImpl(Class<Category> category) throws IllegalAccessException, InstantiationException
{

        Reflections reflections = new Reflections("com.dpd.modules");
        Set<Class<? extends Category>> classes = reflections.getSubTypesOf(category);


        Category queryGetter = null;

        if (DDLTool.isOracle())
        {
            for (Class s : classes)
            {
                if (Oracle.class.isAssignableFrom(s))
                {
                    queryGetter =  s.newInstance();
                }
            }

        }
        else if (DDLTool.isMSSQL())
        {
            for (Class s : classes)
            {
                if (MsSql.class.isAssignableFrom(s))
                {
                    queryGetter = s.newInstance();
                }
            }
        }
        else if (DDLTool.isPostgres())
        {
            for (Class s : classes)
            {
                if (PosgtreSql.class.isAssignableFrom(s))
                {
                    queryGetter = s.newInstance();
                }
            }
        }

        return queryGetter;

 }

但是,我无法真正将 queryGetter 转换为所需的类别

继承树是这样的:

Category (Interface) -> PortalCorp extends Category (Interface) | Portal365 extends Category (Interface) 

Oracle | MsSql | PosgtreSql (all Interfaces)

然后是具体类(仅限PortalCorp,Portal365也一样):

MsSqlQueryGetterPortalCorp implements PortalCorp, MsSql

OracleQueryGetterPortalCorp implements PortalCorp, Oracle

PostgresQueryGetterPortalCorp implements PortalCorp, PosgtreSql

但是我在行中收到不兼容的类型错误:

queryGetter = s.newInstance();

如果我执行,我如何实现所需的行为

 getImpl(PortalCorp.class); 

DDLTool.isOracle()返回真

我最终会得到 com.dpd.modules.OracleQueryGetterPortalCorp 的实例吗?

提前致谢

最佳答案

循环变量没有使用泛型。如果你尝试会发生什么:

for (Class<? extends Category> s : classes)

如果编译器也不喜欢那样,在分配新实例之前转换它怎么样:

queryGetter = (Category) s.newInstance();

关于java - 如何动态转换 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61559325/

相关文章:

java - 为什么在 Student(Student s) 中可以使用实例变量?

css - Bootstrap 是否根据它是什么设备添加类?

c# - 在 jqGrid 中,读取与保存单个属性/列是否有不同的值?

java - 在 Swing 中调用后台线程

java - 将可写对象添加到 Hadoop 配置

java - 如何在启动时将 JVM 选项传递给 jshell

reflection - TypeScript:检查派生类是否实现了方法

java - 来自接收到的字符串的android UTF8编码

javascript - 变量不保存新值

java - Flex Blaze DS 和 JPA - 延迟加载问题