Java注释处理器:javax.validation.constraints.过去的注释更改了字段类型。例如,
public class Foo {
@javax.persistence.Temporal(TemporalType.TIMESTAMP)
private Date date;
}
for (Element element : clsElement.getEnclosedElements()) {
TypeMirror type = element.asType(); // type is Type$ClassType
}
类型为Type$ClassType
。但是添加了@过去的注释
public class Foo {
@javax.persistence.Temporal(TemporalType.TIMESTAMP)
@javax.validation.constraints.Past
private Date date;
}
元素.asType((已更改为Type$AnnotatedType
。
为什么@Past更改了类型?但@Temporal不会改变它。如何从AnnotatedType获得TypeMirror?
根据AnnotatedType接口官方文档:
AnnotatedType表示当前在该VM中运行的程序中对类型的潜在注释使用。使用可以是Java编程语言中的任何类型,包括数组类型、参数化类型、类型变量或通配符类型。
AnnotatedType接口的getType方法返回带注释类型字段的基础类型。
Internal@Past使用getType方法检查基础数据类型是否为Date/Interval。