簡體   English   中英

我如何檢查在JAVA中實例化的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM