检查注释是否属于特定类型

时间:2010-07-27 21:55:23

标签: java reflection annotations instanceof isinstance

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

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

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

我想这样做:

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

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

5 个答案:

答案 0 :(得分:42)

您是否只是在寻找

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

答案 1 :(得分:18)

甚至更简单:

if (annotation instanceof Valid) { /* ... */ }

答案 2 :(得分:9)

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

if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {

答案 3 :(得分:5)

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

import javax.validation.Valid;

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

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

答案 4 :(得分:3)

由于注释只是一个类,因此您只需使用== compare:

即可
if (annotation.annotationType() == Valid.class) { /* ... */ }