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