代码之家  ›  专栏  ›  技术社区  ›  Vivin Paliath

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

  •  16
  • Vivin Paliath  · 技术社区  · 15 年前

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

    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 回复  |  直到 14 年前
        1
  •  40
  •   Affe    15 年前

    你只是在找

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

    ?

        2
  •  18
  •   yurez    14 年前

    或者更简单:

    if (annotation instanceof Valid) { /* ... */ }
    
        3
  •  9
  •   sleske    14 年前

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

    if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {
    
        4
  •  4
  •   Vivin Paliath    15 年前

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

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

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

        5
  •  3
  •   Jorn    15 年前

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

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