这个要反射构建的类,见代码:
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();