今天,我想在this documentation之后创建我的第一个注释接口,但是我得到了这个编译器错误

Invalid type for annotation member":
public @interface MyAnnotation {
    Object myParameter;
    ^^^^^^
}

显然,Object不能用作注释成员的类型.不幸的是,我找不到任何关于一般情况下可以使用哪些类型的信息.

这是我通过反复试验发现的:

  • String→ 有效的
  • int→有效
  • Integer→ 无效(令人惊讶)
  • String[]→ 有效(令人惊讶)
  • Object→ 无效的

也许有人能解释一下哪些类型是被允许的,以及为什么.

推荐答案

它由section 9.6.1 of the JLS指定.注释成员类型必须是以下类型之一:

  • 原始的
  • 一串
  • 一个枚举
  • 另一种注释
  • 以上任何一种的数组

这似乎是限制性的,但毫无疑问,这是有原因的.

还要注意,上述规则隐含地禁止多维数组(例如一串[][]).

this answer所述,不允许使用类array.

Java相关问答推荐

我想知道为什么我的控制器给出嵌套响应

Gmail Javi API批量处理太多请求

使用log 4j2格式的Hibernate 显示SQL日志(log)

伪类focus-in不适用于PFA中的选项卡

BiPredicate和如何使用它

OpenJDK、4K显示和文本质量

当一个链表中间有一个循环时,它的松散部分会发生什么?

Apache POI:使用反射获取zoom 级别

我无法将附件发送到NetBeans之外

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

嵌入式ActiveMQ Artemis Web控制台加载错误

在JavaFX项目中注册组合框的控件FX验证器时,模块系统出错

使用Mockito进行的Junit测试失败

如何在Java记录中设置BigDecimal类型属性的精度?

Sack()步骤中的合并运算符未按预期工作

如何在代码中将行呈现在矩形前面?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

Bash数组的单引号元素并使用空格连接

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

如何使用我的RLE程序解决此问题