Как получить экземпляр класса - PullRequest
1 голос
/ 21 декабря 2009

Я сделал три класса classA, classB и classC в одном пакете. Теперь я создаю три объекта classA внутри classB и два объекта classA внутри classC. Теперь, как я могу получить следующие вещи в классе A.

1) Сколько объектов класса A было использовано classB и classC? 2) Как я могу получить имя и ссылку на объекты класса A, которые находятся в classB и classC?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2009

Для общего числа экземпляров у вас может быть статическая переменная в классе А. Статическая переменная - это переменная, которая основана на самом классе, а не на экземпляре, и определяется следующим образом:

private static int totalInstances = 0;

А затем в конструкторе класса A вы просто увеличиваете эту переменную и уменьшаете ее в деструкторе.

Затем вы можете создать метод доступа к этой переменной

public int getTotalInstances(){
    return totalInstances;
}

И тогда вы сможете получить общее количество экземпляров следующим образом:

classA.getTotalInstances()

Убедитесь, что это имя класса, а не имя экземпляра.

Если вы хотите отслеживать ссылочные переменные, вы можете создать статический массив ссылочных переменных и добавлять ссылку каждый раз, когда объект был создан таким же образом, мы увеличивали общее количество экземпляров:)

1 голос
/ 21 декабря 2009

Вы не можете, если вы не предоставите ссылку на «владельца» на c'tor каждого объекта A.

0 голосов
/ 21 декабря 2009

Если вы сделали это так:

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 и подсчета всех ненулевых членов этого типа и отражения экземпляров A, чтобы получить объект names (предположим, у вас есть своего рода метод A#getName()).

Если вы сделали это так (только код для B):

public class B {
   public B() {
     new A();
     new A();
     new A();
   }
 }

, нет возможности «взглянуть на экземпляр B» и сказать, сколько было создано A. Единственный способ - это инструмент класса А, как предложил Доминик. Но он не скажет вам, сколько А существует, сколько А было создано до сих пор.

Если вы хотите больше подробностей, используйте один из многих профилировщиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...