Java中接口对象的计数器

时间:2014-10-27 10:12:19

标签: java oop interface

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

public class MyClass {

    public static int count = 0;

    public MyClass() {
        count++;
    }

    //other stuff
    //...
}

然后,只需致电

  

MyClass.count

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

我想知道是否有办法用界面做同样的事情,例如如果我的界面名为ICountable,我怎么知道当时我的程序中有多少个ICountable对象。我想用工厂模式来做这件事,但是在任何设计方式中我都注意到了弱点,所以我还没有找到一个有效的解决方案,有没有人知道这样做的好方法?

3 个答案:

答案 0 :(得分:0)

你可以看看这个帖子:

how many instances for a class exists at runtime in java

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

答案 1 :(得分:0)

请参阅Get Member/Fields of an existing Object中的答案,因为我知道如果不解析文件上的类路径来分析任何.class文件或(例如静态代码分析),就无法保证获取所有此类信息。

即使存在实现所需接口的类,您的类加载器也可能无法直接显示/访问这些类(例如,匿名类)。

仍然在我的anser中,有一个图书馆提到大部分时间都能完成这项工作。

答案 2 :(得分:0)

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中使用单独的变量来分别计算每个变量。