如果我有一个单例课程,例如:

public class MySingleton(){
    private static MySingleton istance;
    private int element;

    private MySingleton(){element = 10;}

    public static MySingleton getIstance() {
        if(istance == null)
            istance = new Mysingleton();
        return istance;
    }
    public void setElement(int i ){
        element = i;
    }
    public int getElement(){
        return element;
    }
}


我想通过调用更改元素的值

MySingleton.getIstance().setElement(20)


会改变该距离的元素值吗?这是一个例子:

... main () {
    MySingleton.getIstance().setElement(20);
    System.out.prinln(MySingleton.getIstance().getElement());
    // It displays 10, why ?

最佳答案

我建议您使用enum,因为它更简单且线程安全(但不能使用getter / setter)

public enum MySingleton() {
    INSTANCE;

    private int element = 10;

    public void setElement(int element) { this.element = element; }
    public int getElement() { return element; }
}

MySingleton.INSTANCE.setElement(20);
System.out.prinln(MySingleton.INSTANCE.getElement()); // prints 20.

关于java - 不确定Singleton,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28113749/

10-11 03:35