No sé por qué, pero el JLS es muy claro:
Discussion
Note that null is not a legal element value for any element type.
Y la definición de un elemento predeterminado es:
DefaultValue:
default ElementValue
Desafortunadamente, sigo encontrando que las nuevas funciones del lenguaje (Enums y ahora Anotaciones) tienen mensajes de error del compilador muy inútiles cuando no cumples con las especificaciones del lenguaje.
EDITAR: Un poco de búsqueda en Google encontró lo siguiente en el JSR-308, donde argumentan a favor de permitir nulos en esta situación:
Observamos algunas posibles objeciones a la propuesta.
La propuesta no hace posible nada que no fuera posible antes.
El valor especial definido por el programador proporciona una mejor documentación que nulo, lo que podría significar "ninguno", "no inicializado", nulo en sí, etc.
La propuesta es más propensa a errores. Es mucho más fácil olvidar la comprobación de un valor nulo que olvidar la comprobación de un valor explícito.
La propuesta puede hacer que el modismo estándar sea más detallado. Actualmente, solo los usuarios de una anotación necesitan verificar sus valores especiales. Con la propuesta, muchas herramientas que procesan anotaciones tendrán que verificar si el valor de un campo es nulo para que no arrojen una excepción de puntero nulo.
Creo que solo los dos últimos puntos son relevantes para "por qué no hacerlo en primer lugar". El último punto ciertamente trae a colación un buen punto: un procesador de anotaciones nunca tiene que preocuparse de que obtendrán un valor nulo en un valor de anotación. Tiendo a ver eso como más trabajo de los procesadores de anotaciones y otro código de marco similar tener que hacer ese tipo de verificación para que el código de los desarrolladores sea más claro en lugar de al revés, pero ciertamente haría difícil justificar el cambio.
Class<? extends Foo> bar();
.