为什么 "Integer.TYPE" 在注释 "attribute value must be constant" 中显示错误

Why does "Integer.TYPE" show error in annotation "attribute value must be constant"

我创建了一个注释:

@Target(ElementType.FIELD )
@Retention( RetentionPolicy.RUNTIME )
public @interface Test
{
    Class something();
}

但是当我用 Integer.TYPE 调用它时(对于 int 的 return 类型),它显示错误。

public class TestA
{
    @Test(Integer.TYPE)
    public int id;
}

Class is not commensurate with the value Integer.TYPE

It is a compile-time error if the element type is not commensurate with the element value. An element type T is commensurate with an element value V if and only if one of the following is true:

  • [...]

  • If T is Class or an invocation of Class (§4.5), then V is a class literal (§15.8.2).

来自Integer

的源代码
public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

表达式 Integer#TYPE 不是 class 文字。 Integer.classint.class 都可以,如果这就是您所追求的。

尝试使用 int.class 而不是 Integer.TYPE:

@Test(int.class)