如何由string类型的类名生成类的实例?
已经获得了类的名称,是String类型的,例如myClass
String myClassName="myClass";
如何生成myClass的实例
myClass mc=new myClassName(); 这样不可以啊
问题点数:20、回复次数:7Top
1 楼evonli()回复于 2005-08-03 10:55:42 得分 5
Class.forname(myclassname)Top
2 楼ffansky(ffansky)回复于 2005-08-03 11:01:09 得分 0
myClassName 不是对象吗?Top
3 楼shenpipi(皮皮)回复于 2005-08-03 11:01:46 得分 5
Object o=Class.forName(myClassName).newInstance();
myClass mc=(myClass)o;Top
4 楼sgboy(sgboy)回复于 2005-08-03 11:17:33 得分 0
怎么会报错呢?
import java.io.*;
public class myClass{
public myClass(){
System.out.println("myClass constructed...");
}
}
import java.io.*;
import java.lang.*;
public class test{
public test(){
}
public static void main(){
myClass mc;
String myClassName="myClass";
try{
mc=(myClass)Class.forName(myClassName).newInstance();
}catch(Exception e){
}
}
}
Top
5 楼aico(aico)回复于 2005-08-03 11:31:53 得分 10
myClass mc;
这样的声明是不行的,除非你的myClass确实在classpath中。如果是动态加载的类就不能这样。
为简单起见,现在认为你的myClass在classpath中。
String myClassName = "myClass";
Class class = Class.forName(myClassName);
myClass mc = (myClass)class.newInstance();
这种方法适用于调用myClass的无参数构造器。
如果想调用它的有参数构造器,就麻烦一点,例如它的构造器为:
class myClass
{
String myparam;
public myClass(String param)
{
myparam = param;
}
}
则可以适用反射,进行对象构造:
String myClassName = "myClass";
Class class = Class.forName(myClassName);
Constructor con = class.getConstructor(new Class[]{java.lang.String});
myClass mc = (myClass)con.newInstance(new String[]{"helloworld"});
为了简单,我在代码例子中未加异常处理,实际编程时应对谨记。
或者,你可以对myClass的所有构造器进行遍历,
Constructor[] cons = class.getConstructors();
调用其中一个构造器进行构造,例子不再详细写了。
当然,对于无参数构造器,也可以用这种方式。Top
6 楼sgboy(sgboy)回复于 2005-08-03 11:36:21 得分 0
晕啊,我改了一个 public static void main(String[] args)
就可以了Top
7 楼aico(aico)回复于 2005-08-03 11:38:56 得分 0
sorry,此处有笔误:
Constructor con = class.getConstructor(new Class[]{java.lang.String});
应为
Constructor con = class.getConstructor(new Class[]{java.lang.String.class});
或者
Constructor con = class.getConstructor(new Class[]{Class.forName("java.lang.String")});
或者
Constructor con = class.getConstructor(new Class[]{"".getClass()});
Top




