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()); } } }
立志如山 静心求实
浙公网安备 33010602011771号