Java 为什么不允许接口作为注释成员?
考虑以下代码:Java 为什么不允许接口作为注释成员?,java,types,interface,annotations,default,Java,Types,Interface,Annotations,Default,考虑以下代码: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Bar { Foo foo() default FooImpl.FooConstant; } 编译器错误: 注释值不是允许的类型 如果我用FooImpl替换Foo,则接受该代码 这种行为的原因是什么? 注释成员类型必须是以下类型之一:基元、字符串、类、枚举或上述任意类型的数组 如果元素类型与ElementVa
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bar {
Foo foo() default FooImpl.FooConstant;
}
编译器错误:
注释值不是允许的类型
如果我用FooImpl
替换Foo
,则接受该代码
这种行为的原因是什么?
注释成员类型必须是以下类型之一:基元、字符串、类、枚举或上述任意类型的数组
如果元素类型与ElementValue不相称,则为编译时错误
希望这有帮助
在本文档中也找到了相同的内容:
返回类型仅限于前面类型的原语、字符串、类、枚举、注释和数组。如上所述,不允许使用“接口”
如果我用FooImpl替换Foo,则代码被接受
除非FooImpl是一个枚举,否则我会非常惊讶是否编译了它
注释成员只能包含以下内容:
- 原始类型
- 串
- 类文字
- 注释
- 枚举项
- 或上述任意一种的一维数组
来源:我完成了第一句话,第二句似乎是问题所在。我想知道为什么注释中不允许这样做…@soc我完成了第一句话不,你不允许<代码>类将Foo Foo()视为一种方法(只是为了简单起见)。。。我们可以将接口称为方法的返回类型吗??:)