21

我正在使用反射来查看附加到类属性的注释是否属于特定类型。目前我正在做:

if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
   ...
}

这让我觉得有点笨拙,因为它依赖于一个完全限定类名的字符串。如果将来命名空间发生变化,这可能会导致细微的错误。

我想要做:

if(Class.forName(annotation.annotationType().getName()).isInstance(
     new javax.validation.Valid()
)) {
   ...
}

但是javax.validation.Valid是一个抽象类,不能实例化。有没有办法针对接口或抽象类模拟instanceof(或基本上使用)?isInstance

4

5 回答 5

48

你只是在寻找

if (annotation.annotationType().equals(javax.validation.Valid.class)){}

?

于 2010-07-27T22:00:41.547 回答
24

或者更简单:

if (annotation instanceof Valid) { /* ... */ }
于 2011-05-10T13:48:07.780 回答
12

只是为了完整起见,另一种可能性是

if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {
于 2010-12-21T16:04:39.397 回答
5

好的,我想在发布问题之前我应该​​做更多的研究。我发现我可以使用Class.isAssignableFrom(Class<?> cls)

import javax.validation.Valid;

if(Valid.class.isAssignableFrom(annotation.annotationType())) {
   ...
}

这似乎可以完成这项工作。不过,我不确定使用这种方法是否有任何警告。

于 2010-07-27T21:59:24.127 回答
3

由于注释只是一个类,您可以简单地使用 == 比较:

if (annotation.annotationType() == Valid.class) { /* ... */ }
于 2010-07-27T22:04:38.377 回答