保错内容
Exception in thread "main" java.lang.NoSuchMethodException: chapter22.Cat.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3349)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2553)
at chapter22.reflaction.main(reflaction.java:9)
代码
package chapter22;
import java.lang.reflect.Field;
public class reflaction {
public static void main(String[] args) throws Exception{
String path = "chapter22.Cat";
Class<?> aClass = Class.forName(path);
Object o = aClass.getDeclaredConstructor().newInstance();
Field name = aClass.getField("name");
System.out.println(name.get(o));
}
}
Cat类
public class Cat {
public String name = "小黄";
public int age = 2;
public char sex = '公';
public Cat(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
原因是没有无参构造器,导致创建实例时构造器报错
即 Object o = aClass.getDeclaredConstructor().newInstance();出错
正确方式
public static void main(String[] args) throws Exception{
String path = "chapter22.Cat";
Class<?> aClass = Class.forName(path);
Object o = aClass.getDeclaredConstructor(String.class,int.class,char.class).newInstance("小黄",3,'母');//传入构造类型和参数
Field name = aClass.getField("name");
System.out.println(name.get(o));
}