Вопрос немного сложен, поэтому я приложу все усилия, чтобы объяснить это ясно.
Для моего приложения 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? (избегая их для ввода сырых идентификаторов строки)