#java #android #enum
Всем привет. В проектировании приложения часто попадаются статические элементы, например, кнопки нижней навигации, отвечающие за смену фрагмента, списки категорий, чекбоксы, типы сортировок, кнопки соц.сетей и т.д. Везде использую enum. Например, создаю enum для кнопок нижней нааигации и "захардкоживаю" классы фрагментов, для кнопок соц. сетей - енумы с их ссылками, названиями, ссылками на картинки в R.drawable. Для сортировок (скажем из БД) - тоже прямо в полях делаю специфичные экземпляры для ОРМ типа SortedBy. Вообщем, для всех статичных данных использую Enum-ы. Буквально весь проект ими уже кишит. Я считаю что енумы полезны в случае реальной схожести. Но, сейчас, все больше появляются расширения, к примеру, при переходе на определенный фрагмент требуется кидать инфу об этом в аналитику, причем, для одного определенного фрагмента. Вообшем, сейчас вся эта красота превращается в уродство. Для тех фрагментов к которым не припилена аналитика я в полях приписываю null и потом на них делаю проверки. Скажите, хорошо ли вообще использовать енумы? Сейчас лучше все переписать (на что?) или дальше писать костыли? Когда действительно нужно их использовать? И надо ли вообще?
Ответы
Ответ 1
Enum следует использовать тогда, когда вам нужно а)конечное, б)заранее определенное, в)адекватно именованное множество г)уникальных значений. Например у светофора всего три сигнала (утрируя). public enum TrafficLight{ RED, YELLOW, GREEN; } Теперь, задавая текущую горящую секцию вы(ваш коллега) сможете использовать только вот этот заданный набор цветов и не сможете задать, например TrafficLight.BLUE Lights lights = new Lights(); lights.current = TrafficLight.BLUE; // Ошибка момента компиляции // lights.current имеет тип TrafficLight Enum хороши для создания коротких словарей (например статусов чего-то) или в качестве флагов (если не предполагается их комбинировать). Пихать везде и по любому поводу их, конечно, не нужно. Кроме того, enum-ы далеко не бесплатны. Обратите внимание, что в Android SDK их практически нет, а вместо них используются числовые константы. Почитайте, почему было сделано так. Только не бросайтесь изничтожать enum-ы в пользу числовых констант - это далеко не всегда оправдано. :) Например, если мы заменим класс цветов светофора по примеру гугла на числа: public class TrafficLight{ public static final Integer RED = 1; public static final Integer YELLOW = 2; public static final Integer GREEN = 3; } То никакой защиты от такого косяка не будет: Lights lights = new Lights(); lights.current = 4; // Хреннайдибельная ошибка в рантайме // lights.current имеет тип Integer - ни о чем не говорит
Комментариев нет:
Отправить комментарий