当前位置: 首页 > 面试题库 >

为注释字段设置默认的空值时出错

后化
2023-03-14
问题内容

为什么会出现错误“属性值必须恒定”。是不是 常量???

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeInterface {
    Class<? extends Foo> bar() default null;// this doesn't compile
}

问题答案:

我不知道为什么,但是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。我倾向于看到,随着注释处理器和其他此类框架代码的工作越来越多,必须进行这种检查以使开发人员的代码更清晰,而不是相反,但这肯定会使更改它变得不合理。



 类似资料:
  • 问题内容: 我正在尝试使用Jackson将一些JSON对象映射到Java对象。JSON对象中的某些字段是必填字段(可以用标记),而某些字段是可选字段。 用Jackson映射之后,在JSON对象中未设置的所有字段在Java中都将具有空值。是否有类似的注释可以告诉Jackson为Java类成员设置默认值(如果为null)? 编辑:为了使问题更清楚,这里是一些代码示例。 Java对象: JSON对象可以

  • 我正在尝试用Jackson将一些JSON对象映射到Java对象。JSON对象中的一些字段是强制性的(我可以用标记),而一些字段是可选的。 在与Jackson进行映射之后,JSON对象中没有设置的所有字段在Java中都将有一个空值。是否有类似于的注释可以告诉Jackson为Java类成员设置默认值,以防它为空? 或: 注释只是为了显示我的要求。这不是真正的注解。如果JSON对象与第一个示例类似,我希

  • 我试图设置可变投掷SpEL在Spring启动应用程序: 应该来自应用程序-{profile}。财产。但是字段始终为空,即使已存在。 带有的代码可以正常工作,但包含空字符串。 我的问题是,如果使用SpEL的属性不存在,如何将null设置为variable。 upd:值来自特定于配置文件的属性文件

  • 我在互联网上搜索过,看到了关于在mysql中使用Hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为具有数据类型整数的列,如下所示。 而且工作得很好。 但是我没有看到任何varchar/string数据类型的示例,我尝试了columnDefinition中的不同类型,比如, 使用“长度”属性:- 等等。 但在这种情况下,表不是由hibernate创建的,这可能是由于语法错误

  • 我有一个自定义的对象FlightRequest的机会对象,有一个金额提交的机会和FlightRequest。 我想在FlightRequest的Amount字段中将机会的金额提交值设置为默认值。因此,每当单击FlightRequest的新按钮时,金额输入应该已经与机会的金额字段一起输入 我使用的是标准页面布局,没有任何视觉力页面布局,不能使用它。 我看到有一个选项可以设置字段的默认值,但Oppor

  • 我正在使用Lombok注释,但我希望一些字段是可选的,并默认为,以避免NPE。有没有一个简单的方法可以做到这一点?我什么也找不到。 或者,一种自定义的方法,用于在变量为时返回默认值。