我对在使用单例类初始化/访问ArrayList的代码进行了增强/测试。
import java.util.ArrayList;
public class SingletonArrayList {
private static SingletonArrayList mInstance;
private static ArrayList<String> list = null;
public static SingletonArrayList getInstance() {
if (mInstance == null)
mInstance = new SingletonArrayList();
SingletonArrayList.list.add("a");
SingletonArrayList.list.add("b");
SingletonArrayList.list.add("c");
return mInstance;
}
private SingletonArrayList() {
list = new ArrayList<String>();
}
// retrieve array from anywhere
public ArrayList<String> getArray() {
return SingletonArrayList.list;
}
}
然后我创建了一个测试类,在其中调用上述单例两次:
import java.util.ArrayList;
public class TestSingletonArrayList {
public static void main(String[] args) {
ArrayList<String> array = SingletonArrayList.getInstance().getArray();
for (int i = 0; i < array.size(); i++) {
System.out.println(array.get(i));
}
System.out.println("-----------");
ArrayList<String> array2 = SingletonArrayList.getInstance().getArray();
for (int i = 0; i < array2.size(); i++) {
System.out.println(array2.get(i));
}
}
}
输出结果为:
a
b
c
-----------
a
b
c
a
b
c
这看起来非常奇怪。我期望单例类的第二次调用只会返回a,b,c而不是a,b,c,a,b,c。
出了什么问题?我期望只有a,b,c,因为这是一个单例。
谢谢,问候 马里奥