大虾救命!
XD现在有一个问题,想不到方法解决。
我做了个标签,标签中有一个属性,这个属性将会接受一个类名。我怎样才能通过这个字符串型的类名实例化相应的类呢?类有很多,不可能通过if、else if的方法去逐个判断。
各位大虾救命啊!!
XD现在有一个问题,想不到方法解决。
我做了个标签,标签中有一个属性,这个属性将会接受一个类名。我怎样才能通过这个字符串型的类名实例化相应的类呢?类有很多,不可能通过if、else if的方法去逐个判断。
各位大虾救命啊!!
Class tempclass = Class.forName("mypackage.Myclass");
}catch(Exception e){
System.out.println(e.toString());
}
Object tempclass = Class.forName("mypackage.Myclass").newInstance();
}catch(Exception e){
System.out.println(e.toString());
}
修改一下楼上的,那个字符串参数要用包路径全名
我想LZ的意思是明确类的引用以至于可以使用该类的方法。
楼上二位的方法都是正确的,但是tempclass并不能使用Myclass类的方法。
100分不好拿哦:(
有个办法就是你的所有这些动态生成的类都使用同一个抽象父类,然后每个类都覆盖同名的方法,这样就可以使用多态性调用方法了。abstract class Parent {
public abstract void method ();
}class A extends Parent {
public void method () {
...
}
}class B extends Parent {
public void method () {
...
}
}
try{
Parent tempclass =(Parent) Class.forName("A").newInstance();
tempclass.method();//
}catch(Exception e){
System.out.println(e.toString());
}
如果是这样呢?public class A {
public List methodA(){
return new ArrayList();
}
}public class H {
public String methodH(){
return new String("");
}
}这玩意儿怎么办?怎么才能抽出共同的抽象方法来呢?
你那样写和我的写法有本质的区别吗?
你是对对象的反射
我是对类的反射,我加一句照样就变成了对对象的反射而且你不知道类的构造函数怎样,如果函数有参数,你那样写还要不得
其实在classfor的时候,栈内存中的数据已经按照一般类(如类名是tempclass)的方法、数据被初始化好了的。如下例子:
import java.lang.reflect.Method;
public class Test1 {
public Test1(){
//现在我们用反射机制处理类
try{
Class myTempclass = Class.forName("Tempclass");
//查看myTempclass包含了哪些方法
Method[] myTempclassMethod = myTempclass.getMethods();
for(int i = 0 ; i < myTempclassMethod.length ; i ++){
System.out.println(myTempclassMethod[i].getName());//
}
}
catch(Exception e){
System.out.print(e.toString());
}
}
public static void main(String[] src){
new Test1();//自己执行一下,看看结果就知道了。如果有兴趣反射temp2class类来试一试
}
}class Tempclass{
public void function1(){
System.out.println("ererw");
}
public void function2(){
System.out.println("3434");
}
}class temp2class{
public void mylove(){
System.out.println("I Love yangyang");
}
}