为什么 "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.class
或 int.class
都可以,如果这就是您所追求的。
尝试使用 int.class
而不是 Integer.TYPE
:
@Test(int.class)
我创建了一个注释:
@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 valueV
if and only if one of the following is true:
[...]
If
T
isClass
or an invocation ofClass
(§4.5), thenV
is a class literal (§15.8.2).
来自Integer
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
表达式 Integer#TYPE
不是 class 文字。 Integer.class
或 int.class
都可以,如果这就是您所追求的。
尝试使用 int.class
而不是 Integer.TYPE
:
@Test(int.class)