作者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)