Re: [問題] 如何動態的載入Class?
※ 引述《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)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章
                            12
                        
                            32