反射的基本使用

package com.liuyanzuo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.HashSet;

public class Reflect_1 {

    /*
     * 反射的基本使用
     * 
     */
    public static void main(String[] args) {
        String s=new String();
        HashMap hm=new HashMap();
        Reflect_1.show(hm);
    }
    public static void show(Object p){
        //打印class的头信息
        System.out.print(Modifier.toString(p.getClass().getModifiers())+" class "+p.getClass().getSimpleName()+" ");
        //获得父类的信息,默认Object不写
        String superClassName=Reflect_1.getSuperClass(p);
        if(!superClassName.equals("")){
            System.out.println("extends "+Reflect_1.getSuperClass(p));
        }
        //获得接口的信息
        String inter=Reflect_1.getInterfaces(p);
        if(!inter.equals("")){
            System.out.println("implements"+inter+"{");
        }
        //获得构造方法的信息
        String constructors=Reflect_1.getConstructors(p);
        if(!constructors.equals("")){
            System.out.println("   "+constructors);
        }
        //获得属性的信息
        String field=Reflect_1.getFields(p);
        if(!field.equals(""))
            System.out.println("   "+field);
        //获得方法的信息
        String methods=Reflect_1.getMethods(p);
        if(!methods.equals(""))
            System.out.println("   "+methods);
        System.out.println("}");
    }
    public static String  getConstructors(Object o){
        String re="";
        Constructor<?>[] cons=o.getClass().getConstructors();

        for(Constructor c:cons){
            Class<?> [] params=c.getParameterTypes();
            //获得参数的SimpleName
            String temp=c.getName();
            int last=temp.lastIndexOf(".");
            temp=temp.substring(last+1, temp.length());
            //构成语句,依次:构造方法的Modifier类型(public、private等等)+构造方法名字+(参数)
            re=re+Modifier.toString(c.getModifiers())+" "+temp+"(";
            if(params.length!=0){
                for(int i=0;i<params.length;i++){
                    re=re+params[i].getSimpleName()+" arg"+i;
                    if(i<params.length-1)
                        re=re+",";
                }
            }
            re=re+"){}\r\n   ";
        }
        return re;
    }
    public static String getSuperClass(Object o){
        String re="";
        re=o.getClass().getSuperclass().getSimpleName();
        if(re.equals("Object"))
            return "";
        return re;
    }
    public static String getInterfaces(Object o){
        String re="";
        Class<?>[] interfaces=o.getClass().getInterfaces();
        if(interfaces.length!=0)
        {
            for(int i=0;i<interfaces.length;i++){
                re=re+" "+interfaces[i].getSimpleName();
                if(i<interfaces.length-1)
                    re=re+",";
            }

        }
        return re;  
    }
    public static String getFields(Object o){
        String re="";
        Field [] fds=o.getClass().getDeclaredFields();
        for(Field f:fds){
            re=re+Modifier.toString(f.getModifiers())+" "+f.getType().getSimpleName()+" "+f.getName()+";\r\n   ";
        }
        return re;
    }
    public static String getMethods(Object o){
        String re="";
        Method [] methods=o.getClass().getDeclaredMethods();
        for(Method m:methods){
            re=re+Modifier.toString(m.getModifiers())+" "+m.getReturnType().getSimpleName()+" "+m.getName()+"(";
            Class<?>[] params=m.getParameterTypes();
            for(int i=0;i<params.length;i++){
                re=re+params[i].getSimpleName()+" arg"+i;
                if(i<params.length-1)
                    re=re+",";
            }
            re=re+"){}\r\n   ";
        }
        return re;
    }

}

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值