Как добавить экземпляр типа MyClass в массив MyClass, объявленный в MyClass, внутри конструктора MyClass? - PullRequest
0 голосов
/ 26 сентября 2018

Для отслеживания экземпляров у нас есть массив MyClass [] mc = new MyClass [5];

Я хочу сохранить экземпляры MyClass, созданные внутри этого массива, во время самого вызова конструктора,

Примерно так:

public class MyClass{
  private static final int MAX_SIZE = 64;
  private static int number = 0;
  private static MyClass[] classList= new MyClass[MAX_SIZE];


  public MyClass(MyClass mc) { 
    classList[number++] = mc;
  }

  public static void main(String[] args) {
  MyClass mc1 = new MyClass(mc1);
}

Но это не работает, так как я получаю сообщение об ошибке «mc1 не может быть инициализирован», что ожидается, tbh.

Теперь я знаю, что мы можем создать другой метод, который будет сохранять экземпляр созданного класса внутри массива, но это «сохранение экземпляров класса» отвечает интересам класса и не хочет заставлять пользователей класса вызыватьЭтот метод.Следовательно, найти способ закончить это в самом const.

Как мне это сделать?Заранее большое спасибо!!:)

Просить друга.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы могли бы лучше использовать список, такой как ArrayList.Производительность ArrayList не намного хуже, чем у массива.

открытый класс ArrayTest {приватный статический список List classList = new ArrayList <> ();

public ArrayTest() {
    classList.add(this);
}

public static void main(final String[] args) {
    final ArrayTest mc1 = new ArrayTest();
}

}

0 голосов
/ 26 сентября 2018

Использование MyClass mc в качестве параметра в вашем конструкторе является ошибкой.Этот экземпляр MyClass не может быть инициализирован, так как он требует другого предыдущего уже инициализированного экземпляра.Как сказал кто-то до меня, вы можете использовать ... = this и обходить его, но это не рекомендуется.Просто напишите дополнительный метод.

0 голосов
/ 26 сентября 2018

Вы можете сделать это в своем конструкторе:

classList[number++]  = this;

И просто не иметь этого параметра mc.

Но, конечно, вся идея - плохая практика.Класс несет особую ответственность.Вы возлагаете на него другую ответственность (подсчитывать / перечислять экземпляры).Таким образом, помимо того факта, что ваш код легко создает утечку памяти, он также нарушает принцип единственной ответственности.

Если вы хотите отслеживать определенные объекты, тогда есть другой класс , который содержиттакие списки и явно регистрируют вновь созданные объекты там.

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