类中的变量注释[关闭]

问题描述 投票:-2回答:1

最近我看到了一个使用注释验证字段的示例:

Class Foo{
    @Min(2)
    int x;
}

我知道我可以访问注释接口中声明的函数,如:

//UPDATE: missing code
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Min {
    int x() default 0;
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Afoo {
    String msg() default "Oy!";
}

@Afoo(msg = "Hi!")
class Foo{
//    @Min(3)
    public int x;
}

public class Test{
    public static void main(String[] args) {
        Class c = Foo.class;
        Annotation an = c.getAnnotation(Afoo.class);
        Afoo a = (Afoo)an;

        System.out.println(a.msg());
    }

}

但是,当我取消注释该行时

//    @Min(3)

并创建一个名为Min的新注释界面,我有一个错误说:

注释类型不适用于此类声明。

所以,即使我可以访问此功能,我怎么知道它与x有关?

java validation annotations
1个回答
3
投票

假设你自己版本的Min注释的声明本身用@Target(ElementType.TYPE)注释,@Target是错误的。 ElementType.TYPEfor classes, interfaces and enum declarations。您不想注释类型,您想要注释字段x。使用

@Target(ElementType.FIELD)

代替。

© www.soinside.com 2019 - 2024. All rights reserved.