检查注释是否属于特定类型
我正在使用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) { /* ... */ }
- java优化nitpick:在投射之前调用instanceof进行检查是否更快投出一些东西并让它抛出exception?
- Java中的instanceof – 为什么不编译?
- 如何在现代JVM实现中实现instanceof?
- 通过Collections.unmodifiable *已经用Collections.unmodifiable *包装的实例是多么低效?
- 缺少Class.isInstance()的GWT解决方法
- java中的instanceof运算符用于比较不同的类
- 检查ArrayList以获取对象的实例
- 带抽象参数和inheritance的Java抽象方法
- “instanceof Void”总是返回false吗?