我对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")
}
}
感谢。
答案 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 time
,put init() function inside getInstance()
:
public static Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
init();
return(INSTANCE);
}
立即检查您的LogCat窗口。