反射Constructor

根据 class 文件反编译得到 构造方法

这属于反射的内容,这里的源代码只是反编译 Constructor 得到的构造方法不完整源代码

代码:

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

/**
 * 反编译一个类的Constructor
 */

/**
 * public class Vip {
 *     int no;
 *     String name;
 *     boolean gender;
 *
 *     public Vip() {
 *     }
 *
 *     public Vip(int no){
 *         this.no = no;
 *     }
 *
 *     public Vip(int no, String name) {
 *         this.no = no;
 *         this.name = name;
 *     }
 *
 *     public Vip(int no, String name, boolean gender) {
 *         this.no = no;
 *         this.name = name;
 *         this.gender = gender;
 *     }
 * }
 */
public class ReflectTest11 {
    public static void main(String[] args) {

        StringBuilder s = new StringBuilder();

        try {
//            Class c = Class.forName("com.bjpowernode.javase.bean.Vip");
            Class c = Class.forName("java.lang.String");
            Object obj = c.newInstance();


            s.append(Modifier.toString(c.getModifiers()));
            s.append(" class ");
            s.append(c.getSimpleName());
            s.append(" {\n");

            Constructor[] constructors = c.getDeclaredConstructors();
//            System.out.println(constructors.length);   4
            // 拼接构造方法
            for (Constructor cc : constructors){
                s.append("\t");
                s.append(Modifier.toString(cc.getModifiers()));
                s.append(" ");
                s.append(c.getSimpleName());
                s.append("(");
                // 拼接参数
                Class[] parameterTypes = cc.getParameterTypes();
                for (Class ccc : parameterTypes){
                    s.append(ccc.getSimpleName());
                    s.append(",");
                }
                s.append(") {\n");
                s.append("\t}\n");
            }
            s.append("}");

            System.out.println(s);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

public final class String {
	public String(byte[],) {
	}
	public String(byte[],int,int,) {
	}
	public String(byte[],Charset,) {
	}
	public String(byte[],String,) {
	}
	public String(byte[],int,int,Charset,) {
	}
	 String(char[],int,int,Void,) {
	}
	 String(AbstractStringBuilder,Void,) {
	}
	public String(StringBuilder,) {
	}
	public String(StringBuffer,) {
	}
	 String(byte[],byte,) {
	}
	public String(char[],int,int,) {
	}
	public String(char[],) {
	}
	public String(String,) {
	}
	public String() {
	}
	public String(byte[],int,int,String,) {
	}
	public String(byte[],int,) {
	}
	public String(byte[],int,int,int,) {
	}
	public String(int[],int,int,) {
	}
}

PS:大概写一下,存在较多Bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值