做項目的時候遇到一個問題,就是需要動態加載類並實例化對象.現在分享給大家!
另外說句題外話,Class.forName("").newInstance();用於工廠真的是挺好的,有用到的時候你可以試試!
簡單介紹下:Class.forName( )靜態方法的目的是為了動態加載類。在加載完成后,一般還要調用Class下的newInstance( )靜態方法來實例化對象以便操作。因此,單單使用Class.forName( )是動態加載類是沒有用的,其最終目的是為了實例化對象。
上代碼的說:
先是父類代碼:
1 package com.test.entity; 2 3 public class ItemBase { 4 public String toString(){ 5 return "ItemBae"; 6 } 7 8 }
子類代碼:
package com.test.entity; public class ItemA extends ItemBase{ private String name; private String age; @Override public String toString(){ return "A的name:"+name+",A的age:"+age; } 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; } }
package com.test.entity; public class ItemB extends ItemBase{ private String name; private String age; @Override public String toString(){ return "B的name:"+name+",B的age:"+age; } 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; } }
工廠代碼:
package com.test.factory; import com.entity.test.entity.ItemBase; public class Factory { public static ItemBase createObj(String className) throws Exception{ return (ItemBase)Class.forName(className).newInstance(); }
用法
public class Test { public static void main(String[] args) { ItemBase itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemA"); System.out.println("A:"+itemBase.toString()); itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemB"); System.out.println("B"+itemBase.toString()); } }
這里只是個示范,你可以去把你的類配置到xml去動態的讀取,只需改XML你就能得到你想要的類`~用法很多`~ 我只是簡單的演示下
