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

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

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

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

我想要做:

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

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

你在寻找吗?

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

甚至更简单:

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

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

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

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

 import javax.validation.Valid; if(Valid.class.isAssignableFrom(annotation.annotationType())) { ... } 

这似乎做了这个工作。 不过,我不确定使用这种方法是否有任何警告。

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

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