У меня есть несколько классов данных (например, realm таблицы). Я обрабатываю каждый из них одинкаовым способом (см. код ниже).
Меняются только имена классов : "Ticket.class", далее например "SecondTable.class" и т.д. Имена классов заранее известны.
Q1. Как мне определить метод с аргументом типа класс ?
Q2. Или как сделать что-то типа "for each [classes] do ..." ?
Realm realm = Realm.getDefaultInstance();
RealmResults<Ticket> tickets = realm.where(Ticket.class)
.findAll();
realm.beginTransaction();
for (int i = tickets.size() - 1; i >= 0; i--) {
if ... {
Notification notification = new NotificationCompat.Builder(this)...;
StartMyAsyncTask().execute(tickets.get(i));
// etc...
// delete from DB
tickets.get(i).removeFromRealm();
}
}
realm.commitTransaction();
public class Ticket extends RealmObject {... }
Дублирую свой ответ со StackOverflow
Можно создать некий объединяющий интерфейс:
public interface IAction {
void action();
}
для классовTicket
и SecondTable
, а затем реализовать его в соответствии с логикой класса:
public class Ticket extends RealmObject implements IAction {
@Override
public void action(){...}
}
Следующим шагом нужно создать шаблонный метод (полагаю, определить его можно в классе утилит):
public static <T extends RealmObject & IAction> void yorForEachMethod(Class<T> cls) {
Realm realm = Realm.getDefaultInstance();
RealmResults realmObjects = realm.where(cls).findAll();
realm.beginTransaction();
for (int i = realmObjects.size() - 1; i >= 0; i--) {
if ... {
Notification notification = new NotificationCompat.Builder(this)...;
// здесь можно безопасно приводить к типу интерфейса IAction и вызывать его методы
((IAction)realmObjects.get(i)).action();
// или можно передавать интерфейс в асинхронную задачу
//StartMyAsyncTask().execute((IAction)realmObjects.get(i));
// etc...
// delete from DB
realmObjects.get(i).removeFromRealm();
}
}
realm.commitTransaction();
}
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть картинка и в зависимости от того клиент двигает карту или нет она будет отображатьсяТо есть открылась карта на ней стоит прикрепленная...
Новичок в Spring mvc и второй день не могу запустить Tomcat: