Что не так в определении перечисления Java - PullRequest
0 голосов
/ 27 июля 2010

Я определил публичный enum ABC в ABC.java, а затем скомпилировал его в ABC.class.

В другом XYZ.java я использую частный ABC _abc .

XYZ и ABC находятся в некотором пакете.

Но он говорит не может найти класс символов ABC .

Что не так?

package teacherII;

public enum Semester {

        Fall1999, Spring2000, Fall2000,
        Spring2001, Fall2001, Spring2002, Fall2002,
        Fall2003, Spring2004 
}

Вдругой файл, который я использую

package teacherII;

public class Questionnaire {  
    private Semester _semester;

Команда компиляции: javac -d ../classes/ Questionnaire.java

Класс Semester.class находится на ../класс / teacherII / Semester.class.Это было до того, как я скомпилировал Questionnaire.java


Спасибо вам, ребята, за ваш ответ. Сезон заключается в том, что, как сказали Крис и Винит, я не устанавливал classpath при компиляции Questionnair. Теперь это работает.Еще раз спасибо, ребята!

Ответы [ 3 ]

3 голосов
/ 27 июля 2010

Похоже, вы неправильно компилируете.

Определение вашего enum выглядит нормально. Причина, по которой вы получаете это сообщение об ошибке, заключается в том, что скомпилированный (.class) файл отсутствует (или недоступен), когда вы пытаетесь скомпилировать второй файл.

Так, например:

---- A.java ----
package a;
public enum A { one, two, three }
---- B.java ----
package a;
public class B {
   A x;
}

Отлично скомпилируется с: javac A.java B.java

Но это не удастся, если, например, вы сначала скомпилируете B.java:

javac B.java  
B.java:3: cannot find symbol
symbol  : class A
location: class a.B
   A x;
   ^
1 error

Я думаю, что-то подобное происходит с вами.

Итак, в основном проверяйте ваш путь к классу при компиляции.

0 голосов
/ 27 июля 2010

Нет проблем с вашим кодом.

В вашем случае вы получаете эту ошибку, потому что вы используете Enum в другом классе перед его компиляцией.

0 голосов
/ 27 июля 2010

Вы можете столкнуться с проблемами, потому что вы назвали свой enum-идентификатор тем же, что и ваш идентификатор класса (ABC), но если вы просто упрощаете пример, тогда все будет хорошо.

Чтобы использовать ABC, вам нужно сослаться на ABC как на экземпляр объекта, и тогда вы сможете получить доступ к перечислителю.

Например ...

public class ABC {
    public enum ABCEnum { ..., ..., ... };

...

}

public class XYZ {
    public static void main(String args[]) {
        ABC x = new ABC();
        System.out.println(x.ABCEnum);
    }
}

Однако вы также можете сделать перечисление static, чтобы вам не нужно было это делать ..

public class ABC {
    public static enum ABCEnum { ... };

...

}

public class XYZ {
    public static void main(String args[]) {
        System.out.println(ABC.ABCEnum);
    }
}
...