Viv*_*ath 17 java reflection annotations instanceof isinstance
我使用反射来看看是否被连接到一个类的属性的注释,是一种特定类型的.目前我在做:
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
Run Code Online (Sandbox Code Playgroud)
这让我觉得有点笨拙,因为它依赖于一个完全限定的类名字符串.如果命名空间将来发生更改,则可能会导致细微错误.
我想要做:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
Run Code Online (Sandbox Code Playgroud)
但它javax.validation.Valid是一个抽象类,无法实例化.有没有办法模拟instanceof(或基本上使用isInstance)对接口或抽象类?
Aff*_*ffe 43
你在寻找吗?
if (annotation.annotationType().equals(javax.validation.Valid.class)){}
Run Code Online (Sandbox Code Playgroud)
?
yur*_*rez 20
甚至更简单:
if (annotation instanceof Valid) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
sle*_*ske 11
为了完整起见,另一种可能性是
if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {
Run Code Online (Sandbox Code Playgroud)
好的,我想在发布问题之前我应该做更多的研究。我发现我可以使用Class.isAssignableFrom(Class<?> cls):
import javax.validation.Valid;
if(Valid.class.isAssignableFrom(annotation.annotationType())) {
...
}
Run Code Online (Sandbox Code Playgroud)
这似乎可以完成工作。不过,我不确定使用此方法是否有任何警告。