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