Как загрузить java класс и его ссылочный класс рекурсивно - PullRequest
0 голосов
/ 21 июня 2020

Изображение Диаграмма классов выглядит следующим образом:

class A {
  B b;
}

class B {
  C c;
}

class C {
}

Я хочу загрузить классы A 、 B и C при запуске перед вызовом A 、 B или C, но когда я пытаюсь class.forName("A") JVM загружает только класс A, как мне рекурсивно загрузить все классы от A до C?

Ответы [ 2 ]

0 голосов
/ 24 июня 2020

Вы можете вызвать Class.forName(“B”) и Class.forName(“C”), чтобы загрузить их.

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

Если вы действительно хотите добиться такого поведения (и есть ссылки на типы от A до B), вы можете использовать отражение, чтобы перечислить все объявленные методы A и объявленные поля A. Если какой-либо из них включает B, то этот список вызовет добавление классов.

Однако, если нет никакой связи между A и B, вам придется выполнить Class.forName(“B”), чтобы выполнить работу.

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

0 голосов
/ 21 июня 2020

, если вы хотите загрузить класс B внутри класса A и класс C внутри B, вам необходимо определить конструктор для создания нового экземпляра

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

class B {
  C c;
  public B() {c = new C()}
}

class C {
}

Затем, когда вы создадите новый A, он создаст класс экземпляра B, C и доступ к нему любит

A a = new A();
a.b.c;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...