Я пытаюсь создать свою структуру классов.
Я покажу свою реальную структуру, чтобы быть более конкретным.Как создать класс с помощью T и List <T>
Я пишу приложения с поддержкой автономного режима, так что я решил реализовать свой ETag механизм кэширования при помощи Robospice и GreenDao ОРМ.
Мне нужно только кэш GET запросов.
Во-первых, мои запросы должны расширить базовый запрос (не мое), в моем случае RetrofitSpiceRequest<T, V>
T is type of return data
V is service type, in my case I am using Retrofit.
Проблема состоит в том, что тип возвращаемого значения не List of T
типов по умолчанию, и мне нужно создать подкласс, который расширяет массив T объекты, которые используют его как возвращаемый тип.
Что-то вроде этого
public class City {
....
....
....
public static class List extends ArrayList<City> {
.....
.....
}
}
И использовать City.List в качестве возвращаемого типа.
Но у меня есть мой DAO объявлен следующий
public class CityDao extends AbstractDao<City, Long> {
}
В каждом запросе (GET) Мне нужно иметь определенный DAO в качестве члена для того, чтобы данные кэшей, если он отличается от данных сервера. Или загрузите данные из локальной базы данных, если соединение отсутствует.
Проблема заключается в том, что запрос генерируется типом T, который в основном является списком, City.List в моем случае, некоторых объектов, но мой dao генерируется, например, E-типом, который является City в моем случае.
Я хочу создать метод, как это
public AbastractDao<T,Long> getRequestDao() {
}
Но насколько мой запрос возвращает City.List, я не знаю, как generify этого класса, я чувствую, что это не возможно, но сейчас нет идей ,
В случае неиспользования общего метода дао, я должен дублировать код, как этот
@Override
public void insertReceivedData(City.List received) {
mCityDao.insertOrReplaceInTx(received);
}
@Override
public City.List getCachedData() {
if (mFilterMap != null && mFilterMap.size() > 0) {
return (City.List) mCityDao.loadAll();
} else {
WhereCondition[] whereConditions = QueryUtils.convertPropertyMapToConditionalArray(mFilterMap);
return (City.List) mCityDao.queryBuilder().where(whereConditions[0], Arrays.copyOfRange(whereConditions, 1, whereConditions.length)).list();
}
}
В каждом запросе
Пожалуйста, поделитесь своими идеями.
Спасибо.
ли я понимаю, это правильно, вы хотите, чтобы ваши услуги, чтобы автоматически вводить и вызывать надлежащую Dao? –
Да, но проблема в том, что Dao является расширенным AbstractDao и в основном используется как AbstractDao где T - тип, который сопоставляется с таблицей в моем городе, но мне нужно получить список городов, поскольку запрос возвращает объект класс TI должен создать пользовательский класс MyCityList расширяет ArrayList и вот в чем проблема. –
CROSP