Если класс A имеет ссылку класса B, а класс B имеет ссылку класса A, допустимо ли это на Java? Если да, то когда мы выполняем класс A по времени, класс B не будет создан. Итак, как компилятор выполнит ссылку класса B?Циклическая ссылка в java
TIA
Если класс A имеет ссылку класса B, а класс B имеет ссылку класса A, допустимо ли это на Java? Если да, то когда мы выполняем класс A по времени, класс B не будет создан. Итак, как компилятор выполнит ссылку класса B?Циклическая ссылка в java
TIA
Это совершенно нормально.
Объект A может ссылаться на объект B, а объект B может ссылаться на объект A. Фактически вы видите это на графиках кода часто, когда узел ссылается на весь граф, а граф ссылается на множество узлов.
Если класс A имеет ссылку класса B, а класс B имеет ссылку на класс A, допустимо ли это на Java?
Да.
Когда мы выполняем класс A по времени, класс B не будет создан. Итак, как компилятор выполнит ссылку класса B?
Вы должны создать циклическую ссылку, создав сначала один объект, а затем другой, а затем завершающий цикл; например что-то вроде этого.
A a = new A();
B b = new B(a);
a.setB(b);
(Это предполагает, что A
класс был определен с помощью метода setB(A)
. Существуют и другие способы, чтобы сформировать цикл тоже, но это самый простой.)
Но обратите внимание, что ваш терминология - все это совершенно неправильно.
javac
) не «выполняет» что-либо ... это просто компилирует код.java
.(Важно, чтобы вы изучить и использовать правильную терминологию Java, если вы собираетесь общаться с другими ИТ-специалистами. Это позволяет избежать много недопонимания и путаницы!)
Вы можете протекать 'this' из конструктора A:' new B (this) '. На практике это очень часто происходит в (плохо написанном) графическом коде. –
@MarkoTopolnik - Это правда (если я правильно понимаю, что вы имеете в виду) ... но я стараюсь, чтобы это было просто. –
Это тоже халатность, поэтому вы держите ее в чистоте одновременно :) –
Да, это приемлемо, в так как компилятор хранит вызовы другого класса в качестве имени метода плюс подпись: типы параметров, снова как текст.
Я даже видел следующего ужас
interface A {
final A = new B();
}
class B implements A {
}
Java является слабосвязанным; возникают соответствующие исключения времени выполнения. То же самое компилируется в отношении другой версии библиотеки jar и работает с банкой со сломанным API.
Вы уверены, что имеете в виду, что у классов есть ссылки? Вы имеете в виду, что объект класса 'A' имеет ссылку на объект класса' B'? – chrylis
Вы пробовали это? Вероятно, это займет меньше, чем вопрос. –
Вместо того, чтобы описывать код, писать его, проверять и публиковать, если вы не понимаете, как это работает. –