Джава:Форвардные объявления классов в пространствах имен

StackOverflow https://stackoverflow.com/questions/2417698

  •  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 > Компилятор > Сборка > Проблемы с путями сборки > Круговые зависимости

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top