繁体   English   中英

Java接口对象的计数器

[英]Counter of interface objects in Java

在Java中,如果我想知道MyClass类型的对象有多少,可以用这种方式定义MyClass

public class MyClass {

    public static int count = 0;

    public MyClass() {
        count++;
    }

    //other stuff
    //...
}

然后,只是打电话

MyClass.count

我可以获得创建的对象数量。

我想知道是否有一种方法可以对接口执行相同的操作,例如,如果我有一个名为ICountable的接口,那我该如何知道程序中有多少个ICountable对象。 我正在考虑使用工厂模式进行此操作,但是以任何设计方式我都注意到了缺点,所以我还没有提出可行的解决方案,有人知道这样做的好方法吗?

您可以看一下这个线程:

Java中在运行时存在一个类的多少个实例

但我建议,你实现这样的机制。 发行代码中几乎没有用例。 用于调试/分析的工具有几种。 如果我没记错的话,Eclipse探查器开箱即用地跟踪实例,只需启动它并观察即可。

就像我知道的那样,我在获取现有对象的成员/字段中所引用的答案是我所知的,如果没有解析文件上的类路径来分析任何.class文件或(例如,静态代码分析),就无法保证获得所有此类信息。

即使有一些类实现了所需的接口,这些类也可能不会被您的类加载器直接可见/访问(例如,匿名类)。

仍然在我的分析器中,有一个图书馆提到大多数时候都可以完成这项工作。

单个interface可以有多种实现。 所有实现都应将其视为该interface类型。

您可以尝试与此类似的操作。

我的介面

public interface Val {}

实作

public class Impl1 implements Val {
 public Impl1(){
     Con.count++;
 }
}

public class Impl2 implements Val {
    public Impl2(){
        Con.count++;
    }
}

您需要在此处使用全局计数器。

例如:

public final class Con {
 static int count;
}

现在,您随时可以找到Val的数量

public static void main(String[] args) {
     new Impl1();
     System.out.println(Con.count);
     new Impl2();
     System.out.println(Con.count);
 }

您也可以在Impl1Impl2使用单独的变量, Impl1对每个变量进行计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM