Можно ли в Java создать класс, который имеет все поля как наблюдаемые? - PullRequest
0 голосов
/ 22 февраля 2019

В настоящее время я изучаю реактивное программирование на 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)
       {
       ....
       }
  });

Это моя потребность.Пожалуйста, сообщите решение

...