Java: предварительные объявления классов в пространствах имен - PullRequest
3 голосов
/ 10 марта 2010

Как мне пересылать объявления в 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();
    }
}

UPDATE

В Eclipse при обнаружении этого кода возникает ошибка времени компиляции "Обнаружен цикл в пути сборки ...".

Ответы [ 4 ]

3 голосов
/ 10 марта 2010

Просто импортируйте их. Java гораздо умнее C ++ в этих вопросах

1 голос
/ 10 марта 2010

В Eclipse при обнаружении этого кода возникает ошибка времени компиляции "Обнаружен цикл в пути сборки ...".

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

Если вы поместите взаимозависимые классы в один и тот же проект, Eclipse будет счастлив.

0 голосов
/ 10 марта 2010

Учитывая комментарии здесь (т. Е. Вам не нужно делать явные предварительные объявления, поскольку компилятор может справиться), я понизил ошибку Eclipse до предупреждения и должен будет просто игнорировать ее.

Для этого перейдите на ...

Окно> Настройки> Java> Компилятор> Сборка> Проблемы с путями сборки> Круговые зависимости

0 голосов
/ 10 марта 2010

Ну, вы импортируете классы:

package one;

import two.B;

class A {
    public void foo() {
        new B().bah();
    }
}

или используйте их полное имя:

package one;

class A {
    public void foo() {
        new two.B().bah();
    }
}

Но, само собой разумеется, это вызовет исключение (по крайней мере, во фрагменте, который вы разместили ...).

...