Re: [問題] 如何動態的載入Class?

看板java作者 (thinking in java)時間19年前 (2006/02/14 09:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
※ 引述《wingwindw (小風)》之銘言: : 如果今天我需要在使用者輸入"ClassName"的時候 : 動態的new出該ClassName的instance : 該怎麼做呢?? : 好像是要用Class.forName("ClassName") : 但是詳細情形要怎麼寫?? : 才會有如同 new ClassName() 的效果出來?(取得instance) 主要參考文件: http://java.sun.com/developer/technicalArticles/ALT/Reflection/ 這種情況選用reflection類別是不錯的, 而要產生new ClassName()的效果 一般常見的問題是, 我們不會只想要呼叫預設建構子 :D 像Sample類別, 你有個建構子, 依需要您要呼叫不同的建構子XD public class Sample{ public Sample(){} public Sample(int a, int b){} public Sample(String s){} } ================================================================= 參閱Class的說明, 您會發現有一個method, getConstructors會傳回一個 Constructor陣列 getConstructors public Constructor[] getConstructors() throws SecurityException 而繼續查詢Constructor類別, 幸運地我們找到了getParameterTypes方法 public Class[] getParameterTypes() 有了這些就足以判斷不同的建構子了(overloading特性) ================================================================= 呼叫參數為String的建構子 import java.lang.reflect.*; public class InvokeSample{ public static void main(String[] args) throws ClassNotFoundException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException { Class sample = Class.forName("Sample"); Constructor[] cons = sample.getConstructors(); for(int i=0;i<cons.length;i++){ Class[] parm=cons[i].getParameterTypes(); if(parm.length ==1 && parm[0].getName().indexOf("String")!=-1){ Sample s = (Sample)cons[i].newInstance(new Object[]{"String"}); } } } } -- 又剪貼了一篇xd -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.26.34.20 ※ 編輯: qrtt1 來自: 163.26.34.20 (02/14 10:00)
文章代碼(AID): #13yJ7vg- (java)
文章代碼(AID): #13yJ7vg- (java)