想利用反射技術實例化對象,但是發現總是跑出如下圖的異常:
幸好前人已經幫我解釋了這到底是什麼原因
該解釋來自:https://blog.csdn.net/longtingjing/article/details/50554273
意識是:由於在實體類中未添加無參構造函數引起的。
這樣問題就很明瞭了,果不其然,我在相應類中添加了無參構造器,真的沒有報錯了,下面把代碼複製下來,可以直接使用,但是要把相應的包名改成自己的包名就可以運行了!
源代碼:
1、對象類
package com.xt.model;
public class Person {
private String name;
private String age;
private String address;
//這是無參構造器,實例化對象時必須用到,
//就應為忘了寫這個,才會出現之前的報錯!!
public Person() {
}
public Person(String name, String age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2、測試類
package com.x.test;
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
try {
Class> cl = Class.forName("com.hs.model.Person");
System.out.println(cl.newInstance());
System.out.println("getName"+cl.getName());
Field[] fiels = cl.getDeclaredFields();
for(Field f:fiels){
System.out.println(f.getName());
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
運行結果:
總結:其實這個也不難理解,一般地我們實例化對象時,必須要用到該對象的構造器,否則不能實例化。這裡出錯的原因是我們往往會容易忘記這個報錯是什麼意思,從而不知道如何解決,為了保險起見,對於剛入坑的夥伴們每次創建對象時,最好把無參構造器和有參構造區都寫上。
閱讀更多 goonmydream 的文章