Не знаю почему, но JLS очень ясен:
Discussion
Note that null is not a legal element value for any element type.
И определение элемента по умолчанию:
DefaultValue:
default ElementValue
К сожалению, я продолжаю обнаруживать, что новые языковые функции (перечисления, а теперь и аннотации) содержат очень бесполезные сообщения об ошибках компилятора, когда вы не соответствуете спецификации языка.
РЕДАКТИРОВАТЬ: небольшой поиск в Google обнаружил следующее в JSR-308, где они выступают за разрешение нулей в этой ситуации:
Отметим некоторые возможные возражения против предложения.
Предложение не делает возможным то, что раньше было невозможно.
Специальное значение, определяемое программистом, обеспечивает лучшую документацию, чем null, что может означать «нет», «не инициализировано», само значение null и т. Д.
Предложение более подвержено ошибкам. Гораздо проще забыть о проверке на null, чем о проверке явного значения.
Предложение может сделать стандартную идиому более многословной. В настоящее время только пользователям аннотации необходимо проверять его особые значения. Согласно этому предложению, многие инструменты, обрабатывающие аннотации, должны будут проверять, является ли значение поля нулевым, иначе они не вызовут исключение с нулевым указателем.
Я думаю, что только два последних пункта имеют отношение к вопросу «почему бы не сделать это в первую очередь». Последний пункт, безусловно, поднимает хороший вопрос - обработчик аннотаций никогда не должен беспокоиться о том, что он получит нулевое значение для значения аннотации. Я склонен видеть, что обработка аннотаций и другой подобный фреймворк требует большей работы, чем выполнение такой проверки, чтобы сделать код разработчиков более понятным, а не наоборот, но это определенно затруднит оправдание его изменения.
Class<? extends Foo> bar();
.