Я не знаю точных соображений для этого конкретного случая, но в целом:
Введение нового ключевого слова в язык нарушает совместимость всего существующего исходного кода, который использует это конкретное ключевое слово в качестве идентификатора.,
Существующий исходный код не может быть скомпилирован с новой версией компилятора, пока он не будет изменен, чтобы избежать ключевого слова.Это не невозможно преодолеть (как продемонстрировал случай enum
), но это неудобно и заставляет многих людей выполнять дополнительную работу.Обычно дизайнеры Java пытались внедрить новые языковые функции, не нарушая совместимость исходного кода.
В случае enum
, о котором вы упомянули, я думаю, они решили, что это (а) общее ключевое слово в других C-языки стилей, (b) обычно используются только в качестве идентификатора локальной области действия в существующем коде и, таким образом, легко реорганизуются и (c) без каких-либо разумных альтернатив.Они решили, что выгоды перевешивают затраты.Что касается аннотации, они, очевидно, решили иначе.
Кроме того, вам может быть интересно посмотреть доклад Джоша Блоха об эффективном API-дизайне , который затрагивает многие из этих соображений.