[英]How do i check a class is instantiated in JAVA
我正在嘗試在我的游戲應用程序中實現單例概念。 但是在進入單例概念之前,我們可以找到一個類被實例化,被實例化多少次
最簡單的方法是包括在構造函數中更新的線程安全靜態計數器:
public class CountedClass {
private static final AtomicInteger counter = new AtomicInteger();
public CountedClass() {
counter.incrementAndGet();
}
public static int getInstanceCount() {
return counter.get();
}
}
請注意,這不會顯示當前有多少實例,因為它不會減少銷毀計數器。 您可以重寫finalize
來做到這一點,但我不會。
另外請注意,這是不一樣的東西由長粉筆單身。 建議的實現單例的方法是使用單值枚舉:
public enum Singleton
{
INSTANCE;
// Methods here
}
或像這樣:
public final class Singleton {
// Thread-safe due to guarantees about initializers
private static final Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
如果確實需要,可以使用嵌套類型來實現惰性初始化,但是我很少發現這樣做值得復雜性-上面的模式對我來說總是很好。
單例模式的想法是確保除Class本身之外,沒有人可以創建實例。 為此,我們將構造函數private
以便沒有人可以從外部實例化它。 然后,我們將維護一個私有變量,該變量保存該類的實例,並維護一個靜態方法(如getInstance
,該方法將返回該實例。 完整的示例實現可以在這里找到。 在線上也有許多實現示例。
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
保護實例化:
protected SingleClassName() {
//your stuff here
}
可通過publiclay訪問的是:
public static SingleClassNameGetInstance() {
if (instance == null) {
instance = new SingleClassName();
}
return instance;
}
您只需要一個私有變量即可進行檢查,例如:
private static instance = null;
線程安全的單例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.