我不知道为什么,但是JLS很清楚:
Discussion Note that null is not a legal element value for any element type.
默认元素的定义是:
DefaultValue: default ElementValue
不幸的是,当您不符合语言规范时,我一直发现新的语言功能(枚举和现在的注释)具有非常无用的编译器错误消息。
编辑:一点点搜索在JSR-308中发现了以下内容,他们争辩说在这种情况下允许空值:
我们注意到对该提案的一些反对意见。
该提案无法解决以前无法实现的任何事情。
程序员定义的特殊值比null更好地提供了文档说明,null可能意味着“无”,“未初始化”,null本身等。
该建议更容易出错。忘记对null进行检查要比忘记对显式值进行检查要容易得多。
该提议可以使标准习语更加冗长。当前,仅注释的用户需要检查其特殊值。有了这个建议,许多处理注释的工具将不得不检查字段的值是否为空,以免它们抛出空指针异常。
我认为只有最后两点与“为什么一开始就不这样做”有关。最后一点肯定会带来好处-
注释处理器永远不必担心它们将在注释值上获得null。我倾向于看到,随着注释处理器和其他此类框架代码的工作越来越多,必须进行这种检查以使开发人员的代码更清晰,而不是相反,但这肯定会使更改它变得不合理。



