Будьте очень осторожны, потому что до тех пор, пока А не будет построен, он на самом деле не существует.Если бы B вызвал метод для A, программа должна была завершиться сбоем, потому что вы не можете вызвать метод для A до того, как A будет сконструирован.Построение не завершено, пока A полностью не вернется из своего кода конструктора.
Если вы должны инициализировать B с A при конструировании A, гораздо лучше создать фабричный класс для A, который гарантирует, что B инициализируется после AпостроенЭто выглядело бы примерно так
public class AFactory {
public A newA() {
A a = new A();
B b = new B(a);
return a;
}
}
Для правильной работы на 100% вам может потребоваться ограничить видимость конструктора A ().Лично я бы поместил AFactory
в тот же пакет, что и A
, и сделал бы доступ «по умолчанию» или «закрытым», например,
package same.as.afactory;
public class A {
A() {
...
}
}