考虑以下代码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bar {
    Foo foo() default FooImpl.FooConstant;
}

编译器错误:



如果我将Foo替换为FooImpl,则接受该代码。

这种行为的原因是什么?

最佳答案



如果将其编译,除非FooImpl是枚举,否则我会感到非常惊讶。

注释成员只能包含以下内容:

  • 基本类型
  • 字符串
  • 类文字
  • 批注
  • 枚举项目
  • 或上述
  • 中任何一个的一维数组



    资料来源:JLS

    10-06 00:59