Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不允许接口作为注释成员?_Java_Types_Interface_Annotations_Default - Fatal编程技术网

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是一个枚举,否则我会非常惊讶是否编译了它

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

  • 原始类型
  • 类文字
  • 注释
  • 枚举项
  • 或上述任意一种的一维数组
如果在中声明的方法的返回类型为 注释类型是除以下类型之一之外的任何类型:以下类型之一 基本类型、字符串、类和类的任何调用 枚举类型(§8.9)、注释类型或其中一个的数组(§10) 前面的类型。如果有任何方法,这也是一个编译时错误 在批注类型中声明的签名为 重写相当于声明的任何公共或受保护方法的重写 在类对象中或在接口annotation.annotation中


来源:

我完成了第一句话,第二句似乎是问题所在。我想知道为什么注释中不允许这样做…@soc我完成了第一句话不,你不允许<代码>类将Foo Foo()视为一种方法(只是为了简单起见)。。。我们可以将接口称为方法的返回类型吗??:)