我没有完全理解注释变量和注释其类型之间的区别。 在这种情况下,我是否更喜欢类型注释而不是声明注释?
@EmailField // can be used on String or Array/Collection of String-s
private String email;
private @EmailType String email2;
@EmailField
private List<@EmailType String> emails;
@Target(ElementType.TYPE_USE)
@interface EmailType {}
@Target(ElementType.FIELD)
@interface EmailField {}
答案 0 :(得分:1)
Java 8中的类型注释主要用于支持更强类型检查。
来自https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html:
创建类型注释以支持改进的Java分析 程序确保更强类型检查的方法。 Java SE 8发布 不提供类型检查框架,但它允许您编写 (或下载)一个类型检查框架,实现为一个或 更多可与Java一起使用的可插拔模块 编译器。
从上面的示例中,您应该使用@EmailField
字段注释,并且还应添加@Retention(RetentionPolicy.RUNTIME)
,以便您可以使用反射在运行时检查此注释,如下所示:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface EmailField {}
答案 1 :(得分:1)
以下是声明注释和类型注释之间的区别:
您的注释提供有关值的信息:字符串应该是合法的电子邮件地址。因此,您应该使用类型注释apic loopback
(尽管我只是将其命名为@EmailType
)。
您可以在编译时,运行时或两者都验证类型注释。