Android / Java, стандартизация параметров обновления Observer: как переопределить Enum - PullRequest
0 голосов
/ 30 марта 2020

Вопрос немного сложен, поэтому я приложу все усилия, чтобы объяснить это ясно.

Для моего приложения android мне нужна стандартная система, которая обновляет пользовательский интерфейс при каждом обновлении Бина. Я видел, что Observable класс сделан для него. Я уведомляю наблюдателей всякий раз, когда меняю что-то в бобах.

Хотя, поскольку у меня в приложении может быть значительное количество наблюдателей для одного и того же экземпляра объекта, я не хочу, чтобы все они перерисовывали пользовательский интерфейс, если требуется запуск только одного наблюдателя для определенного свойства. изменение. Я видел, что мы можем добавить параметр Object в методе notifyObserver.

Поэтому я хотел стандартизировать этот параметр. Я создал класс StandardObserverParameter<T>. Этот класс должен содержать свойство T, которое было изменено (поэтому update методы наблюдателей могут немедленно return, если они не обеспокоены изменением данного свойства). Я создал для каждого из своих классов bean-компонентов перечисление PropertiesObservables, которое содержит идентификатор, относящийся к каждому объекту, который я считаю наблюдаемым.

Итак, каждый из моих bean-компонентов имеет это перечисление PropertiesObservables.

Проблема связана с типом propertyChanged опоры моего StandardObserverParameter<T> класса.

Когда я создаю класс StandardObserverParameter<T>:

class StandardObserverParameter<T> {
  T.PropertiesObservables mPropChanged ; 

  StandardObserverParameter(T.PropertiesObservables propChanged)
  {
    mPropChanged = propChanged ; 
  }
}

Проблема в том, что Java не знает, что перечисление PropertiesObservables является общим для всех моих bean-компонентов.

До сих пор я пробовал следующее:

class ObserverStandardArgument<T extends ObservableStandard>
{
    T.ObservableProperties propChanged ;
    ArrayList<Object> additionnalArgs ;
}

abstract class ObservableStandard extends Observable {
    enum ObservableProperties { }
}


public class Member extends ObservableStandard
{
  private String mName ; 
  // ...

  @Override enum ObservableProps { name, ObservableProp2, .. }

  void setName(String name) {
    mName = name ; 
    setChanged(); 
    notifyObservers(new ObserverStandardArgument(Member.ObservableProps.name, ..));  
  }
}

Но, похоже, Java не позволяет переопределить enum, объявленный в родительском классе. Я знаю, что мог бы использовать строковые идентификаторы, но это было бы менее точно для методов наблюдателей update.

Мой вопрос: какой обходной путь, позволяющий разработчикам методов наблюдателей update выбирать свойство, которое они хотите в меню автозаполнения IDE? (избегая их для ввода сырых идентификаторов строки)

1 Ответ

1 голос
/ 31 марта 2020

используйте PropertiesObservables mPropChanged вместо T.PropertiesObservables mPropChanged. Это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...