Использование классов в одноименном пакете в Java - PullRequest
4 голосов
/ 14 мая 2019

Я пытаюсь создать два класса A и B, которые существуют в именованном пакете с именем компонентов. A является открытым классом Window, а B является открытым классом Door, который содержит экземпляр A. Проблема заключается в том, что при компиляции B с использованием

javac -classpath . Door.java

, B не может найти A.

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

Я продемонстрировал себе, что Door.java будет компилироваться, если строка package components; закомментирована из обоих файлов, однако я хочу, чтобы это был пакет с именем компоненты.

Я также пытался использовать import components.Window; в B, но это тоже не работает.

//class A
package components;
public class Window{
public void rollup(){}
public void rolldown(){}
}

//class B
package components;

public class Door{
    public Window window = new Window();
    public void open(){}
    public void close(){}
}

Мой текущий код показывает это, что показывает, что пакет B в настоящее время не может получить доступ к пакету A.

Door.java:8: error: cannot find symbol
        Window window = new Window();
        ^

Как исправить этот код, чтобы B мог создавать экземпляр A, находясь в том же именованном пакете?

1 Ответ

1 голос
/ 14 мая 2019

Принимая в качестве ссылки следующую структуру

/some/base/route/project/components
                          |- Window.java
                          |- Door.java

Затем, запуск javac -classpath . components/Door.java (а также javac components/Door.java) из /some/base/route/project должен работать.

Обратите внимание, что вам нужно запустить команду от 1 уровня до каталога, который начинает соответствовать полному имени пакета для классов.Это означает, что если вы запустите команду из /some/base/route/project/components, она не будет работать.

Наконец, добавление import components.Window; в Door класс бесполезно, поскольку Window уже было видно в Door, так как обаклассы находятся в одном пакете, и Window объявлен как public.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...