У меня есть несколько классов данных (например, 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();
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники