Parameter类

Parameter 类位于 java.lang.reflect 包中,主要用于在程序运行状态中,动态地获取参数信息

常用方法:

getAnnotatedType()

  • 返回一个 AnnotatedType 对象,该对象表示使用类型来指定由该参数对象表示的形式参数的类型

  • 通过其 getType() 方法,可以获取到对应的形参类型

public class ParameterTest {

    public void test(String param,int[] arr){

    }

    public static void main(String[] args) throws NoSuchMethodException {
        Method method = ParameterTest.class.getMethod("test", String.class, int[].class);
        Parameter[] parameters = method.getParameters();
        for (Parameter parameter : parameters){
            AnnotatedType annotatedType = parameter.getAnnotatedType();
            System.out.println(annotatedType.getType());
        }
    }
}

getAnnotation(Class<T> annotationClass)

  如果该参数对象存在指定类型的注解,则返回该注解,否则返回 null

  只有类级别的注解会被继承得到,对于其他对象而言,getAnnotation() 方法与 getDeclaredAnnotation() 方法作用相同

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParameterAnnotation {

    String key();

    String value();
}

public class ParameterTest {

    public void test(@ParameterAnnotation(key = "key", value = "value") String key, String value) {}

    public static void main(String[] args) throws Exception {
        Method method = ParameterTest.class.getMethod("test", String.class, String.class);
        Parameter[] parameters = method.getParameters();
        ParameterAnnotation annotation = parameters[0].getAnnotation(ParameterAnnotation.class);
        // @lang.reflect.Parameter.ParameterAnnotation(key=key, value=value)
        System.out.println(annotation);
    }
}

isVarArgs()

  • 如果该参数对象表示 可变参,则返回 true,否则为 false

 

public class ParameterTest {

    public void test(String key, String ... values) {}

    public static void main(String[] args) throws Exception {
        Method method = ParameterTest.class.getMethod("test", String.class, String[].class);
        Parameter[] parameters = method.getParameters();
        // false
        System.out.println(parameters[0].isVarArgs());
        // true
        System.out.println(parameters[1].isVarArgs());
    }
}

 

getName()

  • 返回参数对象名称

 

public class ParameterTest {

    public void test(String key, String value) {}

    public static void main(String[] args) throws Exception {
        Method method = ParameterTest.class.getMethod("test", String.class, String.class);
        Parameter[] parameters = method.getParameters();
        for (Parameter parameter : parameters) {
            // 正常编译得到: arg0 arg1
            // 加入-parameters后编译得到: key value
            System.out.println(parameter.getName());
        }
    }
}

 

posted on 2019-10-08 23:38  溪水静幽  阅读(541)  评论(0)    收藏  举报