У меня есть следующий метод:
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()
вернет true
, я наконец получу экземпляр com.dpd.modules.OracleQueryGetterPortalCorp
?
Спасибо за авансовый