繁体   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