有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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) 个答案

  1. # 1 楼答案

    好吧,我想我应该在发帖之前做更多的研究。我发现我可以使用^{}

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

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

  2. # 2 楼答案

    因为注释只是一个类,所以可以简单地使用==比较:

    if (annotation.annotationType() == Valid.class) { /* ... */ }
    
  3. # 3 楼答案

    你只是在找

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

    ?

  4. # 4 楼答案

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

    if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {
    
  5. # 5 楼答案

    或者更简单:

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