我在同一个包中创建了三个类classA,classB和classC。现在我在classB中创建了classA的三个对象,在classC中创建了classA的两个对象。现在我怎样才能在classA中得到以下内容。
1)classB和classC使用了classA的多少个对象? 2)我怎样才能得到这个名字& classA和classC中classA对象的引用?
答案 0 :(得分:2)
对于实例总数,您可以在A类中拥有一个静态变量。静态变量是一个基于类本身而不是实例的变量,其定义如下:
private static int totalInstances = 0;
然后在A类的构造函数中,您只需递增该变量,并在析构函数中递减它。
然后,您可以为此变量创建一个访问者
public int getTotalInstances(){
return totalInstances;
}
然后你就可以获得像这样的实例总数:
classA.getTotalInstances()
确保将其设为类名而不是实例名。
如果你想跟踪引用变量,可以创建一个引用变量的静态数组,并在每次创建对象时添加引用,方法与我们增加总实例的方式相同:)
答案 1 :(得分:1)
除非您向每个A对象的c'tor提供“所有者”的引用,否则不能。
答案 2 :(得分:0)
如果你这样做:
public class B {
private a1 = new A();
private a2 = new A();
private a3 = new A();
}
public class C {
private a1 = new A();
private a2 = new A();
}
,然后您可以使用反射API查找类型A的类成员并计算该类型的所有非null成员并反映A
个实例以获取对象名称 (假设您有一种A#getName()
方法)。
如果你这样做(只有B的代码):
public class B {
public B() {
new A();
new A();
new A();
}
}
,没有机会“查看B实例”并告诉我,已经创建了多少个A.唯一的办法就是像Dominic建议的那样对A类进行测试。但它不会告诉你,有多少A存在,到目前为止已经创造了多少A。
如果您需要更多详细信息,请使用众多分析器中的一个。