import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
public class MethodSign<T> {
public void printMethodSign(T t) {
//获取对象类信息
Class<?> aClass = t.getClass();
//获取类中方法
Method[] methods = aClass.getDeclaredMethods();
//遍历方法
for (Method method : methods) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(aClass.getCanonicalName() + " ");
//获取方法修饰符
String mod = Modifier.toString(method.getModifiers());
//先拼接修饰符+方法名+'('
stringBuilder.append(mod + " " + method.getReturnType().getCanonicalName() + " " + method.getName() + "(");
//获取方法参数类型
Class<?>[] parameterTypes = method.getParameterTypes();
//如果没有参数,那就直接拼接上+')'
if (parameterTypes.length == 0) {
stringBuilder.append(")");
} else {
//有参数则遍历
for (int i = 0; i < parameterTypes.length; i++) {
//没到最后一位参数,都用',',否则使用')'最收尾
char end = i == parameterTypes.length - 1 ? ')' : ',';
//输出参数
stringBuilder.append(parameterTypes[i].getCanonicalName() + end);
}
}
//为每个方法换行
System.out.println(stringBuilder.toString());
}
}
public static void main(String[] args) {
Test test = new Test();
MethodSign<Test> methodSign = new MethodSign<>();
methodSign.printMethodSign(test);
}
static class Test {
public void a() {
System.out.println("aaa");
}
public String b() {
return "bbb";
}
public C getC(String s) {
return new C();
}
private C getD(String s, int a, float b, String c) {
return new C();
}
protected C getE(String s, int a, float b, String c) {
return new C();
}
final private C getF(double d, C c) {
return new C();
}
public String[] getG(String a, HashMap map) {
return new String[]{};
}
class C {
private String cname;
}
}
}