Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中接口对象的计数器_Java_Oop_Interface - Fatal编程技术网

Java中接口对象的计数器

Java中接口对象的计数器,java,oop,interface,Java,Oop,Interface,在Java中,如果我想知道有多少MyClass类型的对象,我可以用这种方式定义MyClass public class MyClass { public static int count = 0; public MyClass() { count++; } //other stuff //... } 然后,只是打电话 MyClass.count 我可以得到创建的对象的数量 我想知道是否有一种方法可以对一个接口做同样的事情,例如,如果

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

public class MyClass {

    public static int count = 0;

    public MyClass() {
        count++;
    }

    //other stuff
    //...
}
然后,只是打电话

MyClass.count

我可以得到创建的对象的数量


我想知道是否有一种方法可以对一个接口做同样的事情,例如,如果我有一个名为ICountable的接口,我怎么知道我的程序中有多少对象是ICountable的。我正在考虑用工厂模式来实现这一点,但在任何设计方面我都注意到了弱点,因此我还没有找到一个可行的解决方案,有人知道这样做的好方法吗?

您可以看看这个线程:

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

参考我的答案(据我所知),如果不解析文件上的类路径以分析任何.class文件或静态代码分析,就无法保证获得所有此类信息

即使有实现所需接口的类,这些类也可能无法直接被类加载器(例如匿名类)看到/访问


在我的简历中仍然有一个图书馆提到,大多数时候都是这样做的

单个接口可以有多个实现。所有实现都应该考虑该接口的类型。 你可以试试类似的东西

我的界面

public interface Val {}
实现

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

您需要在这里使用全局计数器

例如:

现在任何时候你都可以找到Val的计数


您可以在Impl1和Impl2中使用单独的变量来分别计算它们。

您知道您必须首先实现您的接口吗?所以我假设你将使用一个类的对象来实现你的iCountable接口?除非你能对实现你的接口的人施加一些控制,否则这是不可能的,除非你愿意把你的接口变成一个抽象类。但是由于Java有单一的实现继承,这可能会干扰其他事情。是的,当然,但是我如何强制所有实现我的接口的类实现计数系统呢?我如何才能得到所有可ICountable对象的数量,而不单独计算所有实现类并进行汇总?@SebastianRedl我试图用抽象类来实现这一点,但这不是需要的,因为java不允许多重继承,所以它有点阻塞me@A4L这应该是答案。是的,但我所说的是,任何人都可以编写一个实现我的接口而不是实现计数系统的类,所以我会有错误的数字
public class Impl2 implements Val {
    public Impl2(){
        Con.count++;
    }
}
public final class Con {
 static int count;
}
public static void main(String[] args) {
     new Impl1();
     System.out.println(Con.count);
     new Impl2();
     System.out.println(Con.count);
 }