获取累的方法签名(类名+方法修饰符+方法返回名+方法名+方法参数名)

本文展示了如何使用Java的反射API遍历类的方法,并打印出每个方法的完整签名,包括修饰符、返回类型、参数类型等关键信息。通过`Method`类和`Modifier`类的使用,可以深入理解Java的反射机制。
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;

        }

    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值