JAVA单身无法正常工作

Mar*_*ler 3 java

我增强/测试了我在使用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,因为它是一个单身人士

谢谢,问候马里奥

Rav*_*ala 9

像这样改变,

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,这是反直觉的.