Могу ли я собрать два класса, которые нужны друг другу? - PullRequest
0 голосов
/ 06 июня 2019

Я делаю пакет, в котором есть два класса, которые импортируют друг друга.

Будет ли это работать?Вот что я делаю:

package com;
import com.B;

class A {

     private B b;

}

package com;
import com.A;

class B {
    private A a;
}

И если это сработает, есть ли какие-нибудь сенарио или подобные случаи, которые могут не сработать?(Например, наличие конструктора, который делает объект другого класса в обоих классах, или что-то еще?)

Спасибо за помощь!

1 Ответ

1 голос
/ 06 июня 2019

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

Легко вызывать бесконечные циклы в вашем коде, если вы не будете осторожны. Например, если вы вызовете конструктор другого класса с обеих сторон, он будет прекрасно скомпилирован, но закончится java.lang.StackOverflowError; то же самое с любой (комбинацией) вызовов, которые идут туда и обратно, прямо или косвенно.

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

package com;
public class A {
    private B b;

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

    public static void main(String... args) {
        (new A()).print();
    }

    public void print() {
        System.out.println(b.getText());
    }
}
package com;
public class B {
    private A a;

    public B() {
        //a = new A();
    }

    public String getText() {
        return "Hello, world";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...