我想创建一个静态对象,可以在整个程序中使用。所以我有这个类的sql。
private static FeadReadDB myInstance;
public FeadReadDB(android.content.Context context){
super(context, DB_NAME, null, DB_VERION);
myInstance = this;
}
public static FeadReadDB getInstance(){
return myInstance;
}
首先,我没有这个getInstance函数,但是当我编写它并更改代码时,我得到了空指针异常。是否有可能创建这样的东西,比方说,在程序开始时初始化myInstance
,然后在其余的程序(活动)中使用?
答案 0 :(得分:1)
很可能,你的目的是使这个对象成为单身。 但问题是,初始化代码中需要输入(在本例中为构造函数)。这是对典型单例技术的挑战。
更好的方法是使用一个静态初始化方法,该方法可以被当前调用构造函数的代码调用:
public static void initialize(android.content.Context context) {
FeadReadDB.myInstance = new FeadReadDB(context);
}
//The above will give you reasons to hide the constructor:
private FeadReadDB(android.content.Context context) {
super(context, DB_NAME, null, DB_VERION);
//As recommended, ensure that no one can call this constructor using reflection:
if(null != myInstance) {
throw new IllegalStateException("Cannot create multiple instances");
}
}
//As the getter may be called before initialization, raise an exception if myInstance is null:
public static FeadReadDB getInstance(){
if(null == myInstance) {
throw new IllegalStateException("Initialization not done!");
}
return myInstance;
}
有了这个,你所要做的就是确保你的客户端代码在调用getInstance()之前调用初始化方法。