Переполнение переполнения Java?

У меня часто возникает ситуация, когда мне нужна переменная для класса, которая может быть представлена ​​как простой тип перечисления, например:

private enum PageOrder {DOWN_THEN_OVER, OVER_THEN_DOWN};

Если объявить тип перечисления внутри класса, который содержит переменную, тогда я должен использовать квалифицированное имя MyClass.PageOrder, что неудобно. Но если я создаю новый класс, у меня есть класс для простой декларации перечисления, которая кажется излишней для меня.

По этой причине я часто использую целые числа вместо типа перечисления.

Любые комментарии/предложения по этой теме?

Ответы

Ответ 1

Вы можете сделать

import static yourpkg.MyClass.PageOrder;

Это всегда будет работать, поскольку внутренние перечисления всегда статичны. Обратите внимание, что это работает даже в файле, который определяет класс MyClass.

Ответ 2

По этой причине я часто использую целые числа вместо типа перечисления.

Пожалуйста, не делайте этого.

Вы можете часто выбирать имя для родительского класса и enum, что на самом деле помогает ясности кода.

class Page {
    enum Order {
        DOWN_THEN_OVER, OVER_THEN_DOWN;
    }
}

// Accessing: A little verbose but clear and efficient.
Page.Order order = Page.Order.DOWN_THEN_OVER;

Вы также можете использовать static import каждый enum, но я предпочитаю многословность выше.

import static com.oldcurmudgeon.test.Test.Order.DOWN_THEN_OVER;
import static com.oldcurmudgeon.test.Test.Order.OVER_THEN_DOWN;

public class Test {

    enum Order {

        DOWN_THEN_OVER, OVER_THEN_DOWN;
    }

    public void test() {
        Order pageOrder = DOWN_THEN_OVER;
    }

}

Очевидно, вы не можете использовать этот подход, если enum private.

Ответ 3

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

Если вы хотите напечатать значение перечисления в удобном для пользователя формате или преобразовать значение в перечисление, то вам, вероятно, нужен класс.