java - 如何动态转换 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);
并DDLTool.isOracle()
返回真
我最终会得到com.dpd.modules.OracleQueryGetterPortalCorp
?
提前致谢
解决方案
循环变量没有使用泛型。如果您尝试:
for (Class<? extends Category> s : classes)
如果编译器也不喜欢这样,那么在分配新实例之前如何转换它:
queryGetter = (Category) s.newInstance();
推荐阅读
- ruby - 使用 Ruby Sinatra 进行 Nokogiri XML 解析
- android - Retrofit 和 MediaWIkiAPI,如何在 json 中以奇怪的键名获取页面内容?
- data-modeling - 在 SAP Hana 中使用代理键
- kdb - qPython QProjection 问题而不是查询的数据
- python-3.x - Python - 使用 if 语句在 html 中查找单词
- database - 数据库设计雄辩问题与查询
- hash - 散列一个 8 位数字,其中仅包含从 1 到 8 的非重复数字
- c# - 我无法访问 App_Code,它是只读的
- javascript - 从 Ajax 调用时,如何在锚标记中为 onClick() 指定多个参数?
- java - 如何在gridview中实现圆角