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。这会起作用
问题有点复杂,我尽量解释清楚。
对于我的 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。这会起作用