我正在使用反射来查看附加到类的属性的注释是否属于特定类型。目前我在做:
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
因为它依赖于一个完全限定的类名字符串,所以这让我觉得有点笨拙。如果命名空间将来发生更改,则可能会导致细微错误。
我想这样做:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
但是javax.validation.Valid
是一个抽象类,无法实例化。有没有办法模拟instanceof
(或基本上使用isInstance
)对接口或抽象类?
答案 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) { /* ... */ }