В настоящее время я изучаю реактивное программирование на Java (для Android).
Я использовал Livedata для прослушивания изменений в поле.
Но у меня возникла проблема.Можно ли вызывать слушателя каждый раз, когда обновляются поля в классе модели?
То есть
- Когда поле класса обновляется, слушатель должен бытьсрабатывает
- Этот слушатель должен вернуть обновленный объект
ОК.Позвольте мне объяснить подробно
Сценарий Представьте себе некоторые классы моделей
class Student
{
String name ;
int age;
int rollno;
Sports sports ;
}
class Sports
{
String sportName;
int score;
}
Теперь это моя потребность.
КогдаЯ обновляю поле в объекте класса Student, после чего слушатель должен вызвать возвращенный обновленный объект класса Student
Например,
, если я обновлю имя какstdobj.name = "Lords"
, тогда должен быть запущен слушатель, который возвращает обновленный объект, как этот
....
public void onUpdated (Student student)
{
...
}
, если я изменил поле возраста как stdobj.age = 25
, тогда должен быть запущен слушатель, который возвращает обновленныйобъект
Примечание
Слушатель также должен запускаться, когда спортивный объект также обновляется, например stdobj.sports = new Sports (....)
.
Мои предыдущие работы
Я использовал Observable interface and BaseObservable
.
, но мне нужно добавить notifypropertychaged(<field_name>)
для каждой переменной.
Что еслиМодельный класс имел 100 переменных.Добавление 100 notifypropertychaged(<field_name>)
- это боль.
То же самое произошло с MutableLiveData
.Мне пришлось преобразовать все поля в объект livingata, а также создать отдельного наблюдателя для этих объектов livingata
Так что решение выше не является для меня префектом.Мне нужно что-то, что автоматически наблюдает все поля за один раз реализации.
Что-то вроде этого:
class Student extends FieldsObserver<Student>
{
...
...
@Override
public void onFieldChanged (Student student)
{
...
...
}
ИЛИ как это
FieldChangedObserver observer = ...;
observer.observe(stdobj, new OnFieldChangedListener()
{
public void onFieldChanged (Student student)
{
....
}
});
Это моя потребность.Пожалуйста, сообщите решение