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

如何通过常量java为注释提供值

纪勇军
2023-03-14
问题内容

我认为这在Java中可能无法实现,因为注释及其参数在编译时已解决。我有一个如下的界面,

public interface FieldValues {
   String[] FIELD1 = new String[]{"value1", "value2"};
}

和另一类,

@SomeAnnotation(locations = {"value1", "value2"})
public class MyClass {
   ....
}

我用注解标记了许多类,我想知道是否可以避免在每个注解中指定字符串,而宁愿使用

@SomeAnnotation(locations = FieldValues.FIELD1)
public class MyClass {
   ....
}

但是,这会产生诸如注释值之类的编译错误,应该将其作为数组初始化程序等。有人知道我如何使用String常量或String []常量为注释提供值吗?


问题答案:

15.28。常数表达式

编译时常量表达式是表示原始类型或String的值的表达式,该值不会突然完成,并且仅使用以下内容组成:

  • 基本类型的文字和类型的文字 String
  • 强制转换为基本类型并强制转换为类型 String
  • […]运营商[…]
  • 用括号括起来的表达式,其包含的表达式是一个常量表达式。
  • 引用常量变量的简单名称。
  • 表格的限定名类型名。引用常量变量的标识符。

实际上,在Java中,无法保护数组中的项。在运行时,任何人都可以做FieldValues.FIELD1[0]="value3",因此,如果我们更深入地研究数组,则数组不能真正恒定。



 类似资料:
  • JAX-RS 具有 HTTP 谓词的注释()和 (),但没有注释。如何为 HTTP 动词添加注释? 如下所示:

  • 我在整个代码中有一堆常量,用于系统的各种可调整属性。我正在将它们全部移动到一个中央文件中。我目前的解决方案是有一个静态加载文件并公开各种getter方法,如下所示: 唯一的问题是,对于我从这个文件中获得的每个常量,我都有一些样板: 我不认为我想使用Spring或类似的东西,因为那看起来更像是boilerplae。我希望使用自定义注释来解决这个问题。我找到了这个教程,但是我真的不能弄清楚如何从注释处

  • 问题内容: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 问题答案: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 否。如果要定义表和列注释,最好的选择是在生成的DDL中根据事实进行操作,然后再对数据库执行操作。

  • 我想提供带有一些方法生成的一些值的注释。 到目前为止我已经试过了:

  • 问题内容: 是否可以通过注释处理器访问带有注释的元素? 是否可以通过注释处理器访问带注释的类型边界? 高度赞赏我错过的相关文档的链接。 内容: 注释: 一个示例类: 处理器: 在classpath 上使用编译以上内容将显示消息,但永远不会调用该方法。当方法参数中存在注释时,使用注释向处理器添加另一个注释可以正常工作。如果方法参数带有注释,则过程将再次忽略该元素。 问题答案: 该注释是有点棘手,因为

  • 问题内容: 我无法使用从常量中获取的枚举作为注释中的参数。我收到此编译错误:“注释属性[attribute]的值必须是枚举常量表达式”。 这是枚举代码的简化版本: 对于注释: 和班级: 该错误仅在方法B的“ theEnum = MYENUM_CONSTANT”中显示。字符串和int常量对于编译器是可以的,但Enum常量不是,即使它的值与methodA上的值完全相同。在我看来,这是编译器中缺少的功能