英文:
How to use a member of Class type in custom annotation?
问题
我尝试将其定义如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Validate {
Class<?> check() default MyClass.class;
}
我在这里收到错误消息:注解成员的类型无效 'MyClass'。
有人能帮忙解决吗?
英文:
Im new to java custom annotations and trying to define a member of type MyClass in my custom java annotation.
I tried to define it as follows:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Validate {
MyClass check() default MyClass.class;
}
I get error here: Invalid type 'MyClass' for annotation member.
Could anyone help to solve this.
答案1
得分: 1
你不能轻松地将自定义类用作注解成员,除非该类是 enum
。因此,如果 MyClass
不是 enum
,那么它就不能被使用。
你可以在Java 17 语言规范 §9.6.1 注解接口元素中找到更多信息。
在注解接口主体中声明的方法的返回类型必须是以下之一,否则将出现编译时错误:
基本数据类型
字符串
类或 Class 的调用(§4.5)
枚举类类型
注解接口类型
其组件类型为前述类型之一的数组类型(§10.1)
因此,只有当 MyClass
是 enum
或其类型为 Class<MyClass>
时,才能使用它。
英文:
You cannot use a custom class easily as an annotation member unless such a class is an enum
. So if MyClass
is not an enum
, then it cannot be used.
You can find more information in the Java 17 Language Specification $9.6.1 Annotation Interface Elements.
> The return type of a method declared in the body of annotation interface must be one of the following, or a compile-time error occurs:
>
> A primitive type
>
> String
>
> Class or an invocation of Class (§4.5)
>
> An enum class type
>
> An annotation interface type
>
> An array type whose component type is one of the preceding types (§10.1).
Therefore MyClass
can be used only if it is an enum
or it's type as Class<MyClass>
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论