站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题java中如何根据一个字符串来创建一个类的对象

java中如何根据一个字符串来创建一个类的对象

摘要: java中如何根据一个字符串来创建一个类的对象


我有一个类叫 MyClass, 我想创建 一个类的对象,如: MyClass myClass = new MyClass("abc");
现在我定义了一个函数,Object CreateClass(String className),他有一个String类型的参数,这个参数指定了某个类的类名,如何根据这个字符串参数来构建这个类的对象并返回它。如:
MyClass myClass = (MyClass)CreateClass("MyClass");



String classname = "java.lang.String";
Object str = Class.forName(classname).newInstance();


是根据类名来构造类吧?

例子:
String className = "org.xxx.xxx"; // 类名
Class myClass = Class.forName( String className ); // 获得类
Object myObject = myClass.newInstance(); // 构造对象

如果你的类构造器是有参数的,就要先用Class的getDeclaredConstructor方法获得构造器,然后再用那个构造器来构造对象。


反射!
同意楼上


但是此时我得到的myObject并不能调用我的类的成员函数呀?
如何对它进行转换呢?


再MyClass myClass = (MyClass)myObject;不行嘛?


youhaodeyi(友好的翼) ,把这句改成这样:
Object myObject = (MyClass)myClass.newInstance(); // 构造对象



但是,我不知道我的类名叫MyClass,我只知道有一个变量包含这个类名,在这种情况下能进行转换吗?


回复人:youhaodeyi(友好的翼) ( 一级(初级)) 信誉:100 2006-10-10 14:09:00 得分:0
?
但是,我不知道我的类名叫MyClass,我只知道有一个变量包含这个类名,在这种情况下能进行转换吗?

---------------------------------
让MyClass实现MyInterface,然后
MyInterface myObject = (MyInterface)myClass.newInstance(); // 构造对象


youhaodeyi(友好的翼)
但是,我不知道我的类名叫MyClass,我只知道有一个变量包含这个类名,在这种情况下能进行转换吗?
--------------------------------------------------------------------
不知道类名叫MyClass?
哪你如何知道要调用哪个成员函数?






让MyClass实现MyInterface,然后
MyInterface myObject = (MyInterface)myClass.newInstance(); // 构造对象

这个正解.



MyInterface是什么?比如我的代码如下:

String className = "MyClass"; // 类名
Class myClass = Class.forName( String className );
...
接下来该怎么写?


高手帮忙了


你不知道类名是什么,那你还要转换,转换为什么东西啊?


也就是说java处理不了这种情况是吧?


Spring...


Sprint不是web上面用的吗?


Class c=Class.forName("ui.App");
Object o=c.newInstance();
Method[] m=c.getMethods();
for(int i=0;iSystem.out.println(m[i].getName());
if(m[i].getName().equals("main")){
Object[] os=new String[1];
m[i].invoke(o,os);
}
}
这样可以调用类的方法


Method[] m=c.getMethods(); 这是得到什么?
m[i].invoke(o,os); 为什么参数会有两个?它invoke出来的东西是什么?


Method[] m=c.getMethods(); 这是得到什么?

这个得到的是一个数组,里面是这个类所有的方法,一个方法对应一个Method对象

m[i].invoke(o,os); 为什么参数会有两个?它invoke出来的东西是什么?

参数1是这个类的一个实例,参数2是这个方法所需的参数

上面那个例子就是找到ui.App类,创建它的一个实例,再找到它的main方法,然后调用


↑返回目录
前一篇: 帮忙Thinking in java第四章里一段示例代码
后一篇: 这个错误是为什么