Java注解获取方法入参
简介
在Java开发中,我们经常会使用注解来为我们的代码添加一些元数据或者标记,以实现特定的功能。其中,获取方法的入参是一项常见的需求。本文将教你如何使用Java注解来获取方法的入参。
流程概述
以下是实现“Java注解获取方法入参”的基本步骤:
步骤 | 描述 |
---|---|
第一步 | 定义一个用于获取方法入参的注解 |
第二步 | 使用自定义注解标注需要获取入参的方法 |
第三步 | 利用反射机制获取方法入参 |
下面将详细介绍每个步骤的具体实现。
第一步:定义注解
首先,我们需要定义一个注解用于标记需要获取入参的方法。我们将这个注解命名为GetMethodParams
,并在该注解中定义一个空的value
属性,用于后续获取入参使用。
public @interface GetMethodParams {
// 空属性,用于后续获取入参使用
String value() default "";
}
第二步:使用注解
接下来,我们需要使用自定义注解GetMethodParams
来标记需要获取入参的方法。在需要获取入参的方法前添加该注解即可。
public class MyClass {
@GetMethodParams
public void myMethod(String param1, int param2) {
// 方法体
}
}
第三步:利用反射获取入参
最后,我们利用反射机制来获取被GetMethodParams
注解标记的方法的入参。
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 获取 MyClass 类的所有方法
Method[] methods = MyClass.class.getDeclaredMethods();
// 遍历所有方法
for (Method method : methods) {
// 判断方法是否标记了 GetMethodParams 注解
if (method.isAnnotationPresent(GetMethodParams.class)) {
// 获取方法的入参类型
Class<?>[] parameterTypes = method.getParameterTypes();
// 获取方法的参数名称
String[] parameterNames = getParameterNames(method);
// 将入参类型和参数名称组装成一个 List
List<String> params = new ArrayList<>();
for (int i = 0; i < parameterTypes.length; i++) {
params.add(parameterTypes[i].getSimpleName() + " " + parameterNames[i]);
}
// 打印方法名和入参信息
System.out.println("方法名:" + method.getName());
System.out.println("入参信息:" + params);
}
}
}
// 获取方法的参数名称
private static String[] getParameterNames(Method method) {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
String[] parameterNames = new String[parameterAnnotations.length];
for (int i = 0; i < parameterAnnotations.length; i++) {
for (Annotation annotation : parameterAnnotations[i]) {
if (annotation instanceof GetMethodParams) {
GetMethodParams getMethodParams = (GetMethodParams) annotation;
parameterNames[i] = getMethodParams.value();
}
}
}
return parameterNames;
}
}
以上代码实现了获取被GetMethodParams
注解标记方法的入参类型和参数名称,并打印出来。
序列图
以下是上述代码的序列图:
sequenceDiagram
participant MyClass
participant Main
MyClass->>Main: 获取 MyClass 类的所有方法
loop For each method
Main->>Main: 判断方法是否标记了 GetMethodParams 注解
alt Method marked with GetMethodParams
Main->>Method: 获取方法的入参类型
Main->>Method: 获取方法的参数名称
Main->>Method: 将入参类型和参数名称组装成 List
Main->>Main: 打印方法名和入参信息
end
end