我增强/测试了我在使用Singleton类初始化/访问的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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我做了一个测试类,我将上述单例调用两次:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
a
b
c
-----------
a
b
c
a
b
c
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪.我期望单例类的第二次调用只返回a,b,c和NOT a,b,c,a,b,c
怎么了?我只期望a,b,c,因为它是一个单身人士
谢谢,问候马里奥
像这样改变,
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是你必须创建对象并立即初始化它.在您的解决方案中,您只需创建一次,并为每次调用单独添加项目.它仍然只有一个实例,但是每次调用时都会向该单例实例添加元素getInstance,这是反直觉的.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |