Джава:Форвардные объявления классов в пространствах имен
-
19-09-2019 - |
Вопрос
Как мне сделать предварительные объявления в Java?
У меня есть два класса, каждый из которых должен вызывать метод в другом, и оба они находятся в разных пространствах имен.Например...
package one;
class A {
public void foo() {
B b = new B();
b.bah();
}
}
и
package two;
class B {
public void bah() {
A a = new A();
a.foo();
}
}
ОБНОВЛЯТЬ
В Eclipse при обнаружении этого кода выдается ошибка времени компиляции: «В пути сборки обнаружен цикл...».
Решение
Просто импортируйте их.Java в этих вопросах намного умнее, чем C++.
Другие советы
В Eclipse при обнаружении этого кода выдается ошибка времени компиляции: «В пути сборки обнаружен цикл...».
Я думаю, что Eclipse жалуется, потому что у вас есть циклическая зависимость между классами в разных проектах Eclipse в вашем рабочем пространстве.Eclipse хочет иметь возможность создавать проекты в линейной последовательности.
Если вы поместите взаимозависимые классы в один проект, Eclipse будет рад.
Итак, вы импортируете классы:
package one;
import two.B;
class A {
public void foo() {
new B().bah();
}
}
или используйте их полное имя:
package one;
class A {
public void foo() {
new two.B().bah();
}
}
Но, разумеется, это приведет к выдаче исключения (по крайней мере, в опубликованном вами фрагменте...).
Учитывая комментарии здесь (т. е. вам не нужно делать явные упреждающие объявления, поскольку компилятор может справиться), я понизил статус ошибки Eclipse до предупреждения, и мне придется просто проигнорировать ее.
Для этого зайдите в...
Окно > Настройки > Java > Компилятор > Сборка > Проблемы с путями сборки > Круговые зависимости