在Java中,如果我想知道MyClass类型的对象有多少,我可以用这种方式定义MyClass
public class MyClass {
public static int count = 0;
public MyClass() {
count++;
}
//other stuff
//...
}
然后,只需致电
MyClass.count
我可以获得创建的对象数量。
我想知道是否有办法用界面做同样的事情,例如如果我的界面名为ICountable,我怎么知道当时我的程序中有多少个ICountable对象。我想用工厂模式来做这件事,但是在任何设计方式中我都注意到了弱点,所以我还没有找到一个有效的解决方案,有没有人知道这样做的好方法?
答案 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);
}
您可以在Impl1
和Impl2
中使用单独的变量来分别计算每个变量。