Ошибка компиляции "Cannot Find Symbol" - PullRequest
6 голосов
/ 11 октября 2010

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

Я написал два интерфейса: Класс и Игра.Интерфейс CLASS должен расширять интерфейс GAME.

Вот два источника интерфейса:

package Impl;

public interface Game
{
    //METHODS AND VARS
}


package Impl;    

public interface Class extends Game
{
    //METHODS AND VARS
}

Теперь, когда я пытаюсь скомпилировать второй интерфейс, я получаю следующую ошибку

class.java:4: cannot find symbol
symbol: class Game
public interface Class extends Game
                               ^

Мой класс Game скомпилирован, и файл класса находится в том же каталоге, что и оба java-файла.Я не смог найти решение.У кого-нибудь есть идеи?

Ответы [ 2 ]

8 голосов
/ 11 октября 2010

Имена классов чувствительны к регистру.Возможно, вы создали интерфейс с именем game, но вы ссылаетесь на него в объявлении Class интерфейса как Game, который компилятор не может найти.

Однако есть еще один шанс, что вы компилируете из своего пакета Impl.Для этого вам нужно сослаться на ваш путь к классу, чтобы компилятор мог найти классы из базы структуры пакета.Вы можете добавить -classpath .. arg к вашему javac перед именем класса:

javac -classpath .. Class.java

В качестве альтернативы, вы можете делать то, что более распространено, компилируя из корня вашей структуры пакета.Для этого вам нужно будет указать путь к вашему Class файлу:

javac Impl\Class.java

, вы всегда можете добавить -classpath . для очистки.

6 голосов
/ 11 октября 2010

Вам нужно прочитать о том, как работают Java classpath и как вы должны организовать свой исходный код. По сути, ваша проблема в том, что когда компилятор javac компилирует «Class.java», он не ожидает найти «Game.class» в текущем каталоге. Это (вероятно) ищет это в "Impl / Game.class".

Страница IBM " Managing the Java classpath " содержит подробное обсуждение того, как установить ваш classpath и как утилиты java (например, java и javac) используют его для поиска файлов классов , Страница Oracle " Setting the Classpath " предоставляет более краткую информацию, но вам необходимо внимательно ее прочитать.

Кстати, в вашем коде есть некоторые зверства стиля:

  • Имена пакетов Java должны быть в нижнем регистре.
  • Вызов класса Class - плохая идея, потому что это вступает в противоречие с классом java.lang.Class, который импортируется по умолчанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...