Android/Java,Observer更新参数标准化:如何覆盖枚举

Android/Java,Observer更新参数标准化:如何覆盖枚举,java,android,enums,observable,overriding,Java,Android,Enums,Observable,Overriding,这个问题有点复杂,所以我会尽力解释清楚 对于我的android应用程序,我希望有一个标准系统,每当Bean更新时,它都会更新UI。我看到,可观察的类就是为它而设计的。每当我改变豆子里的东西时,我都会通知观察者 尽管如此,由于我的应用程序中可以为同一个对象实例设置大量的观察者,我不希望在某个特定属性更改只需要触发一个观察者时,所有观察者都重新绘制UI。我看到我们可以在notifyObserver方法中添加一个对象参数 因此,我想标准化这个参数。我创建了一个类StandardObserverPara

这个问题有点复杂,所以我会尽力解释清楚

对于我的android应用程序,我希望有一个标准系统,每当Bean更新时,它都会更新UI。我看到,
可观察的
类就是为它而设计的。每当我改变豆子里的东西时,我都会通知观察者

尽管如此,由于我的应用程序中可以为同一个对象实例设置大量的观察者,我不希望在某个特定属性更改只需要触发一个观察者时,所有观察者都重新绘制UI。我看到我们可以在
notifyObserver
方法中添加一个对象参数

因此,我想标准化这个参数。我创建了一个类
StandardObserverParameter
。该类需要保存已更改的T的属性(因此,如果观测者不关心给定属性的更改,则他们可以
更新
方法
立即返回
)。我为每一个bean类创建了一个属性TestEnable枚举,它包含一个与我认为可观察到的每个bean支柱相关的标识符。 因此,我的每个bean都有enum
属性observables

问题来自my
StandardObserverParameter
类的
propertyChanged
prop的类型

创建类
StandardObserverParameter
时:

class StandardObserverParameter<T> {
  T.PropertiesObservables mPropChanged ; 

  StandardObserverParameter(T.PropertiesObservables propChanged)
  {
    mPropChanged = propChanged ; 
  }
}
class StandardObserverParameter{
T.观察到的财产发生变化;
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, ..));  
  }
}
类observer标准参数
{
T.可观察到的财产性质发生变化;
ArrayList additionnalArgs;
}
抽象类Observable标准扩展了Observable{
枚举可观察属性{}
}
公共类成员扩展了可观察性标准
{
私有字符串mName;
// ...
@重写枚举ObservalEProps{name,ObservalEProp2,…}
void setName(字符串名称){
mName=名称;
setChanged();
notifyObservers(新的ObserverStandardArgument(Member.observeProps.name,…);
}
}
但是,看起来Java不允许重写父类中声明的枚举。我知道我可以使用字符串标识符,但对于观测者
update
方法,它的精确度会更低


我的问题是:有什么解决方法可以让观察者
update
方法的开发人员在IDE的自动完成菜单中选择他们想要的属性?(避免键入原始字符串属性标识符)

使用PropertiesObservables mPropChanged而不是T.PropertiesObservables mPropChanged。这会奏效的