Подтвердить что ты не робот

Обоснование использования битового поля вместо EnumSet в современном Java 8 API

EnumSet, как старый, как сам enum (как с Java 5), ​​должен быть бескомпромиссной заменой для использования битовых полей: как быстрая и тощая, как битполе (ну, за исключением того, что не было примитивный тип) и typeafe для загрузки. С другой стороны, самые последние и в течение многих лет самые ожидаемые Java API                   & hairsp;.

Должен ли я рассматривать вышеприведенное как явное признание основными экспертами Java, что EnumSet не так хорош в конце концов? Должен ли я пересмотреть общий совет по лучшей практике, чтобы никогда не использовать битовые поля?

4b9b3361

Ответ 1

Было довольно удивлено, что он использует битовые поля, а не EnumSet. Рациональное, хотя обсуждается в этом потоке рассылки. Похоже, что причина заключалась в том, чтобы установить и отключить различные характеристики, не затрагивая тот, который был на конце вызывающего. С помощью EnumSet, чтобы реализовать это, нужно было бы создать новый объект EnumSet каждый раз, когда необходимо изменить его на разных этапах. Я думаю, это причина, по которой бит-поля выигрывают гонку там.

Заключительное предложение этой темы по существу предвосхищает ваш вопрос здесь:

Наличие таких флагов в API Java 8 (и должно) бровей, потому что это идет вразрез с тем, что сказали людям хорошо более десятилетия. Если он принят как есть, лучше быть хорошим объяснение читателям doc о том, почему альтернативы были отклонены. "Мы были удобно с флагами int и ничего более значительно лучше сам" не сократит его ". Мы знаем, что флаги int не очень хороши для API, но мы очень старался найти лучшие альтернативы, безрезультатно" (если бы это было верно).

Ответ 2

Должен ли я пересмотреть общий совет по лучшей практике, чтобы никогда не использовать битовые поля?

Да. Вы должны вообще пересмотреть любой совет, содержащий слова "всегда" или "никогда", независимо от того, является ли он "общим" или не так распространен.