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