Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Что лучше enum или константы в классе

#java


Что лучше enum

enum type {
   Int, Long, String, Boolean, Unknown
}


Или class

public final class type {
 public final static byte Int = 0;
 public final static byte Long = 1;
 public final static byte String = 2;
 public final static byte Boolean = 3;
 public final static byte Unknown = 4;
}

    


Ответы

Ответ 1



enum'ы надо использовать для какого-то диапазона: public enum Color{ White, Red, Blue } Константы для чего-то уникального, к примеру class Math{ public float PI = 3.14f; } Плюсы enum'ов? enum - это тип, так что можно так делать: enum Color { Red,Green,Blue }; enum Size { Big,Little }; void f( Color c ) { } void f( Size s ) { } int main() { f( Red ); f( Big ); } С константами не получится. Главное, как мне кажется, enum'ы - безопасны. Для enum'а вы указываете сигнатуру явно задавая тип: void f( Color c ){} Вы туда ничего другого кроме этого enum'а передать не сможете, иначе ругаться будет на уровне компилятора, вы даже собрать проект не сможете. Для констант было бы так: void f( int c ){} Если вы в этот метод передадите не ту константу, то ошибку заметите только в рантайме. UPD: про память. Если у вас, к примеру, есть enum: public enum Color{ White, Red, Blue } Скомпилируем этот enum задизасемблим полученный файл с помощью javap, получим что-то такое: Скомпилирован из "Color.java" public final class Color extends java.lang.Enum{ public static final Color White; public static final Color Red; public static final Color Blue; public static Color [] values(); public static Color valueOf(java.lang.String); static {}; } Так что да, какой-то оверхед по памяти будет.

Комментариев нет:

Отправить комментарий