[Java]关于如何反射一个有构造参数的对象
这个要反射构建的类,见代码:
class Person { String name; public Person() { } // private Person(int i) { // // } public Person(String name) { this.name = name; } public Person(String name, String name1) { this.name = name; } // public Person(String name,int name1) { // this.name = name; // } public void show() { System.out.println(this.name); } }
这里是反射方法:
Person person = null; // 反射得到一个Person类,这里不是对象!! Class cc = Class.forName("designPattern.Person"); // 拿到所有Person的所有构造器 for (Constructor c : cc.getConstructors()) { if (c.getParameterTypes().length > 1) { //事实证明Constructor.getParameterTypes方法只是计算参数个数,即使2个参数同是String类型,它也返回2 System.out.println(c.getParameterTypes()[1]); } //直到找到一个有且仅有一个String类型作为参数的构造方法并传入参数创建实例 if (c.getParameterTypes().length == 1) { if (c.getParameterTypes()[0].equals(new String().getClass())) { person = (Person) c.newInstance("chris"); } } } person.show();