为什么我的Singleton.getInstance()不在android中执行?

时间:2018-02-19 04:05:48

标签: java android

我对Android有点新鲜。 如果我有一个Singleton,那么在首次初始化单例时会自动调用init函数吗?

public class Singleton  {
    private static Singleton INSTANCE = null;
    private Singleton() {};

    public static Singleton getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Singleton();
        }
        return(INSTANCE);
    }

    void init() {
        Log.d(TAG, "is this firing");
    }
}

我在MainActivity中第一次引用Singleton但是我看不到LogCat中的输出“是这个触发器”:

public class MainActivity extends Activity {
    Singleton model;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        model = Singleton.getInstance();
    }
}

我第一次调用Singleton.sharedInstance时初次使用了swift / ios并在ios应用程序中运行init()并初始化。我不记得Java中发生了什么。

class Singleton {
    private struct Static {
        static var instance: Singleton?
    }

    class var sharedInstance: Singleton {
        if (!Static.instance != nil) {
            Static.instance = Singleton()
        }
        return Static.instance!
     }


    private init() {
         print("initialised first time")
    }
}

感谢。

3 个答案:

答案 0 :(得分:2)

正如我在swift init中所知,当你初始化一个像Kotlin这样的类时,你需要从类constructor调用这个<{1}} / p>

public class Singleton {
    private static Singleton INSTANCE = null;
    private Singleton() {
        init();
    }

    public static Singleton getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Singleton();
        }
        return(INSTANCE);
    }

    private void init() {
        Log.d(TAG, "is this firing");
    }
}

答案 1 :(得分:1)

在实例创建期间没有调用init方法。这样做:

{{1}}

答案 2 :(得分:1)

init()是一个您只定义但未从其他任何地方调用过的函数。

当你的单例对象第一次被创建时,

inside your private constructor where init gets called only once调用init():

private Singleton() {
 init();
}

如果您想将其称为every timeput init() function inside getInstance()

public static Singleton getInstance() {
            if (INSTANCE == null) {
                INSTANCE = new Singleton();
            }
            init();
            return(INSTANCE);
        }

立即检查您的LogCat窗口。

相关问题