如何确定(在运行时)变量是否注释为已弃用?

时间:2017-07-26 13:45:26

标签: java reflection annotations deprecated

此代码可以检查是否已弃用

@Deprecated
public class RetentionPolicyExample {

             public static void main(String[] args){  
                 boolean isDeprecated=false;             
                 if(RetentionPolicyExample.class.getAnnotations().length>0){  
                     isDeprecated= RetentionPolicyExample.class  
                                   .getAnnotations()[0].toString()
                                   .contains("Deprecated");  
                 }  
                 System.out.println("is deprecated:"+ isDeprecated);             
             }  
      }

但是,如何检查是否有任何变量注释为已弃用?

@Deprecated
String variable;

2 个答案:

答案 0 :(得分:5)

import java.util.stream.Stream;

Field[] fields = RetentionPolicyExample.class // Get the class
                .getDeclaredFields(); // Get its fields

boolean isAnyDeprecated = Stream.of(fields) // Iterate over fields
                // If it is deprecated, this gets the annotation.
                // Else, null
                .map(field -> field.getAnnotation(Deprecated.class))
                .anyMatch(x -> x != null); // Is there a deprecated annotation somewhere?

答案 1 :(得分:2)

您正在查看Class注释。通过反射API,您还可以访问FieldMethod注释。

  • Class.getFields()和Class.getDeclaredFields()
  • Class.getMethods()和Class.getDeclaredMethods()
  • Class.getSuperClass()

您的实施存在一些问题

  1. 只有在可能有多个注释时才会检查getAnnotations[0]
  2. 当您检查toString().contains("Deprecated")
  3. 时,您正在测试.equals(Deprecated.class)
  4. 您可以使用.getAnnotation(Deprecated.class)