Можно ли использовать объект верхнего уровня в перечислении Java? - PullRequest
0 голосов
/ 08 сентября 2011

Первый класс, получивший перечисление:

public class EnumTest {

    private Employee empl;

    public EnumTest(Employee empl) {
        this.empl = empl;
    }

    public enum ALL_STRING {

        FNAME(empl.getFirstName()),
        LNAME(empl.getLastName()),
        POSITION(empl.getPosition());
        String str;

        ALL_STRING(String inStr) {
            str = inStr;
        }

        public String getStr() {
            return str;
        }
    }
}

Класс работника:

public class Employee {

    private String firstName;
    private String lastName;
    private String position;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }
}

Когда я пытаюсь его скомпилировать, появляется ошибка,

/ home / shamal / src / Test / src / test / EnumTest.java: 21: на нестатическую переменную empl нельзя ссылаться из статического контекста FNAME (empl.getFirstName ()),

/ home / shamal / src / Test / src / test / EnumTest.java: 22: на нестатическую переменную empl нельзя ссылаться из статического контекста LNAME (empl.getLastName ()),

/ home / shamal / src / Test / src / test / EnumTest.java: 23: на нестатическую переменную empl нельзя ссылаться из статического контекста POSITION (empl.getPosition ());

3 ошибки

Что не так в коде и что должно быть правильно?

Спасибо.

1 Ответ

6 голосов
/ 08 сентября 2011

Перечисления являются статически (время компиляции) уникальными объектами, поэтому вы не можете создавать их значения с использованием динамических параметров.

Непосредственная проблема заключается в том, что вы пытаетесь создать экземпляр перечисления с использованием нестатической переменной-члена, что, таким образом, недоступно во время создания экземпляра самого класса - он будет инициализирован только при создании нового объекта класса.Однако все значения перечисления должны быть полностью инициализированы во время инициализации включающего класса.

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

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