如果你想通過反射機(jī)制得到當(dāng)前包的某個(gè)類的實(shí)例,傳入類名的同時(shí)必須傳入包名。
例如在包c(diǎn)om.coderdream下有兩個(gè)類Shape,ShapeFactory,如果你想在ShapeFactory中的某個(gè)方法中用反射的方法生成Shape類,那么如果直接使用:
Class.forName("Shape").newInstance();
會(huì)拋出找不到類的異常,因?yàn)榇_實(shí)沒有Shape類,而只有com.coderdream.Shape類。但是我們傳參數(shù)時(shí)一般只會(huì)傳不帶包的類名,那么我們可以這樣處理:
String packageName = new ShapeFactory().getClass().getPackage().getName();
return (Shape) Class.forName(packageName + "." + className).newInstance();
其中 new ShapeFactory().getClass().getPackage().getName() 會(huì)得到包名“com.coderdream”,我們只要加上“.”和類名就沒有問題了。return (Shape) Class.forName(packageName + "." + className).newInstance();