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

Android / Java, Observer update parameter standardisation : how to override an Enum

问题有点复杂,我尽量解释清楚。

对于我的 android 应用程序,我想要一个标准系统,它在 Bean 更新时更新 UI。我看到 Observable class 是为它而生的。每当我更改 bean 中的某些内容时,我都会通知观察者。

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

因此,我想将该参数标准化。我创建了一个 class StandardObserverParameter<T>。这个 class 需要保存已更改的 T 的 属性(因此观察者 update 方法可以 return 立即,如果他们不关心给定道具的更改) .我为我的每个 bean class 创建了一个 PropertiesObservables 枚举,其中包含与我认为可观察的每个 bean prop 相关的标识符。

所以,我的每个 bean 都有那个枚举 PropertiesObservables

问题出在我的 StandardObserverParameter<T> class 的 propertyChanged 道具的类型上。

当我创建 class 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 不允许覆盖在父 class 中声明的枚举。我知道我可以使用 String 标识符,但是对于观察者 update 方法来说它会不太精确..

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

使用 PropertiesObservables mPropChanged 而不是 T.PropertiesObservables mPropChanged。这会起作用