作者qrtt1 (thinking in java)
看板java
標題Re: [問題] 如何動態的載入Class?
時間Tue Feb 14 09:59:43 2006
※ 引述《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)