Как лучше всего указывать флаги в методе Java?
Я видел SWT, использующий int в качестве битовых полей, например:
(пример частично из "Effective Java, 2nd Ed."страница 159):
public class Text {
public static final int STYLE_BOLD = 1 << 0; // 1
public static final int STYLE_ITALIC = 1 << 1; // 2
void printText(String text, int flags) {
}
}
и ваш клиентский вызов выглядит следующим образом:
printText("hello", Text.STYLE_BOLD | Text.STYLE_ITALIC);
.. но это не рекомендуется, поскольку вы можете смешивать флаги (значения int) из разных классов вместе безлюбой компилятор проверяет.
В той же книге («Эффективная Java») я вижу использование EnumSet, но затем ваш пользовательский вызов становится:
printText("hello", EnumSet.of(Style.Bold, Style.ITALIC));
Я нахожу это немного многословными я предпочитаю элегантность SWT.
Есть ли другая альтернатива или это в основном два вкуса, которые вы должны выбрать?