如何动态转换Java对象



我有以下方法:

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); 

CCD_ 1返回真

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

提前感谢

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

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

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

queryGetter = (Category) s.newInstance();

最新更新