Java 制作';静态';类可观测
我有一个带有静态方法的类Java 制作';静态';类可观测,java,android,static,observable,observers,Java,Android,Static,Observable,Observers,我有一个带有静态方法的类Settings,用于保存和加载数据。例如,这是Save()方法: public static void Save(SETTING_KEY key, String value) { SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); edi
Settings
,用于保存和加载数据。例如,这是Save()
方法:
public static void Save(SETTING_KEY key, String value)
{
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
}
现在我想让类设置
可见。问题是从Observable扩展我的设置类不起作用,因为我没有实例化这个类,因为我只使用它的静态方法
class Settings extends Observable {
private static Settings instance;
private static synchronized Settings getInstance() {
if(instance == null) {
instance = new Settings();
}
return instance;
}
public static void Save(SETTING_KEY key, String value)
{
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
getInstance().notifyObservers(value); // or whatever
}
// can't override addObserver with a static method, so make a new method instead
public static void addObserverStatic(Observer observer) {
getInstance().addObserver(observer);
}
}
有什么简单的方法可以让这个静态类可见吗?您可以尝试使用单例模式?()
这样,您就可以扩展observable。添加您自己的观察者机制。下面是简单的实现
public interface Observer {
void onSettingsChanged(String key, String value);
}
private static Observer observer;
public static void setObserver(Observer observer_) {
observer = observer_;
}
public static void Save(SETTING_KEY key, String value) {
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
if (observer != null) {
observer.onSettingsChanged(key, value);
}
}
如果需要1个以上的列表,还可以使用
列表,还可以使用某种类型的事件总线()系统来发布事件,而无需提供直接观察者机制。您可以将单例与静态方法相结合
class Settings extends Observable {
private static Settings instance;
private static synchronized Settings getInstance() {
if(instance == null) {
instance = new Settings();
}
return instance;
}
public static void Save(SETTING_KEY key, String value)
{
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
getInstance().notifyObservers(value); // or whatever
}
// can't override addObserver with a static method, so make a new method instead
public static void addObserverStatic(Observer observer) {
getInstance().addObserver(observer);
}
}
正如其他人所说,单例上的静态方法有点淘气。如果可以的话,用其他方法来做。静态和遗传的概念在同一个计划中并不起作用。但这并不妨碍你列出观察者名单,并在你做某事时通知他们