Интерфейс и возвращаемый тип в Java. Как быть? Есть код:public interface DfgDbAdaptee {
public boolean checkTableExists(String tableName) throws DfgFatalException;
}
public class DfgDbSqliteAdapter implements DfgDbAdaptee {
public boolean checkTableExists(String tableName) throws DfgFatalException
{
.....
}
}
public class DfgDbFMDBAdapter implements DfgDbAdaptee {
public boolean checkTableExists(String tableName) throws DfgFatalException
{
.....
}
}
public class DfgDb {
public static ??? Factory()
{
int dbType = DfgAppConfig.getDbType();
if (dbType == DfgAppConfig.DBTYPE_SQLITE){
return new DfgDbSqliteAdapter;
}else if (dbType == DfgAppConfig.DBTYPE_FMDB){
return new DfgDbFMDBAdapter;
}
throw new DfgConfigException("Unknown db type in config");
}
}
//и гдето в коде вызываем:
??? db = DfgDb.Factory();
db.checkTableExists(new String("lalala"));

Собственно вопрос — как описать тип который в коде выше показан как три вопроса? Суть в том что Factory должен возвращать любой класс имеющий реализацию интферейса DfgDbAdaptee.

21 Авг 2019 в 07:10
168 +1
0
Ответы
1

Для описания типа, который может быть одним из классов DfgDbSqliteAdapter или DfgDbFMDBAdapter, вы можете использовать тип интерфейса DfgDbAdaptee. Измените метод Factory() класса DfgDb следующим образом:

public class DfgDb {
public static DfgDbAdaptee Factory()
{
int dbType = DfgAppConfig.getDbType();
if (dbType == DfgAppConfig.DBTYPE_SQLITE){
return new DfgDbSqliteAdapter;
}else if (dbType == DfgAppConfig.DBTYPE_FMDB){
return new DfgDbFMDBAdapter;
}
throw new DfgConfigException("Unknown db type in config");
}
}

Используйте тип DfgDbAdaptee для переменной, которая хранит результат вызова Factory():

DfgDbAdaptee db = DfgDb.Factory();
db.checkTableExists(new String("lalala"));

Теперь переменная db будет иметь тип интерфейса DfgDbAdaptee и может содержать любой объект, который реализует этот интерфейс, такой как DfgDbSqliteAdapter или DfgDbFMDBAdapter.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир