Проблема с ENUM в затмении - PullRequest
       2

Проблема с ENUM в затмении

3 голосов
/ 20 февраля 2011

У меня в IDE Eclipse есть следующая ошибка:

Невозможно ссылаться на поле, пока оно не определено

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

public enum Enun {
    A(STATIK);
    private static int STATIK = 1;

    private Enun(final int i) {
    }
}

Может кто-нибудь сказать мне, как я могу решить эту проблему, пожалуйста?

Спасибо:)

Ответы [ 4 ]

5 голосов
/ 20 февраля 2011

Да, вы не можете ссылаться на статические члены перечисления в объявлении перечисления.Если вы хотите назвать эти числа, то вы должны сделать STATIK членом вложенного статического класса:

A(Constants.STATIK);

private static class Constants {
    private static int STATIK = 1;
}

private Enun(final int i) {
}

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

3 голосов
/ 20 февраля 2011

Вы не можете расширять что-либо еще, потому что enum уже расширяет что-то (по спецификации), но вы МОЖЕТЕ реализовать с помощью enum!Попробуйте это

public interface EnunConstants {
    int STATIK = 1;
    int AWESOME = 2;
    int POSSUM = 3;

}

public enum Enum implements EnunConstants {
    A(STATIK),
    B(AWESOME),
    C(POSSUM);

    private int val;

    private Enun(final int i) { this.val = i; }
    public int getVal() { return val; }

}

public class Sergio {

    public static void main(String[] args) {
        Enun S = Enun.A;
        System.out.println(S.getVal());
        Enun P = Enun.C;
        System.out.println(P.getVal());

    }

}
1 голос
/ 20 февраля 2011

Попробуйте наоборот:

public enum Enun {
    A(1);
    private static int STATIK = A.ordinal();

    private Enun(final int i) {
    }
}

У этого есть побочный эффект, что теперь STATIK больше не является постоянной времени компиляции, но есть небольшие местоположения, которые имеют значение (использование в выражениях switch - но там вы должны использовать значения enum).

0 голосов
/ 20 февраля 2011

Вы не можете передать STATIK в конструктор. Если вы хотите добиться этого, используйте что-то вроде

public enum Enun {
    A(1);
    private int someInt;

    private Enun(final int i) {
        this.someInt = i;
    }
}

Помните, что enum по умолчанию является синглтоном, поэтому нет необходимости использовать static для этого int.

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