Nie wiem dlaczego, ale JLS jest bardzo jasne:
Discussion
Note that null is not a legal element value for any element type.
Definicja elementu domyślnego to:
DefaultValue:
default ElementValue
Niestety, wciąż odkrywam, że nowe funkcje językowe (wyliczenia, a teraz adnotacje) mają bardzo nieprzydatne komunikaty o błędach kompilatora, gdy nie spełniają one specyfikacji języka.
EDYCJA: Trochę googleing znalazło następujące w JSR-308, gdzie argumentują za dopuszczeniem wartości null w tej sytuacji:
Zwracamy uwagę na możliwe zastrzeżenia do wniosku.
Propozycja nie umożliwia niczego, co nie było możliwe wcześniej.
Zdefiniowana przez programistę wartość specjalna zapewnia lepszą dokumentację niż wartość null, co może oznaczać „brak”, „niezainicjowany”, samą wartość zerową itp.
Oferta pakietowa jest bardziej podatna na błędy. O wiele łatwiej jest zapomnieć o sprawdzaniu wartości null, niż o sprawdzaniu jawnej wartości.
Propozycja może sprawić, że standardowy idiom będzie bardziej rozwlekły. Obecnie tylko użytkownicy adnotacji muszą sprawdzać jej specjalne wartości. Dzięki tej propozycji wiele narzędzi przetwarzających adnotacje będzie musiało sprawdzić, czy wartość pola jest równa zeru, aby nie zgłosić wyjątku wskaźnika zerowego.
Myślę, że tylko dwa ostatnie punkty są istotne dla „dlaczego nie zrobić tego w pierwszej kolejności”. Ostatni punkt z pewnością prowadzi do dobrego punktu - procesor adnotacji nigdy nie musi się martwić, że otrzyma wartość null w wartości adnotacji. Zwykle postrzegam to jako bardziej zadanie procesorów adnotacji i innego takiego kodu ramowego, aby wykonać tego rodzaju sprawdzenie, aby kod programistów był bardziej przejrzysty niż na odwrót, ale z pewnością utrudniłoby to uzasadnienie zmiany.
Class<? extends Foo> bar();
.