Ответ 1
Вы можете сделать
import static yourpkg.MyClass.PageOrder;
Это всегда будет работать, поскольку внутренние перечисления всегда статичны. Обратите внимание, что это работает даже в файле, который определяет класс MyClass
.
У меня часто возникает ситуация, когда мне нужна переменная для класса, которая может быть представлена как простой тип перечисления, например:
private enum PageOrder {DOWN_THEN_OVER, OVER_THEN_DOWN};
Если объявить тип перечисления внутри класса, который содержит переменную, тогда я должен использовать квалифицированное имя MyClass.PageOrder
, что неудобно.
Но если я создаю новый класс, у меня есть класс для простой декларации перечисления, которая кажется излишней для меня.
По этой причине я часто использую целые числа вместо типа перечисления.
Любые комментарии/предложения по этой теме?
Вы можете сделать
import static yourpkg.MyClass.PageOrder;
Это всегда будет работать, поскольку внутренние перечисления всегда статичны. Обратите внимание, что это работает даже в файле, который определяет класс MyClass
.
По этой причине я часто использую целые числа вместо типа перечисления.
Пожалуйста, не делайте этого.
Вы можете часто выбирать имя для родительского класса и 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
.
Если вы используете перечисления только для того, чтобы дать кодеру дружественные имена для чисел, и вам никогда не придется записывать их на экран или читать их из файла, то это полностью перебор. Несчастный артефакт о том, что все в java должно быть классом. Если вы используете перечисления, я рекомендую вместо этого использовать константы.
Если вы хотите напечатать значение перечисления в удобном для пользователя формате или преобразовать значение в перечисление, то вам, вероятно, нужен класс.