日期:2014-05-20  浏览次数:20711 次

创建与字符串同名的类的实例
如下:

public   void   fun(String   str){
    if(str.equals( "MyForm1 ")){
            MyForm1   theForm   =   new   MyForm1();
    }
    if(str.equals( "MyForm2 ")){
          MyForm2   theForm   =   new   MyForm2();
    }
    if(str.equals( "MyForm3 ")){
        MyForm3   theForm   =   new   MyForm3();
    }
    if(str.equals( "MyForm4 ")){
        MyForm4   theForm   =   new   MyForm4();
    }
}

我想用反射实现上面的代码怎么实现

public   void   fun(String   str){
        Object     temp   =   Class.forName(str).newInstance();
        //这里怎么实现啊
}  


------解决方案--------------------
你不是已经实现了吗??

还有什么问题?
------解决方案--------------------
晕,我当然知道已经实现了

我是要在不出现 MyForm1,MyForm2...(可能对应100个,那我要判断100次啊)的情况下实现上面的代码!!!
------解决方案--------------------
我明白楼主的意思

楼主是要转型到实际的类型对吧


------解决方案--------------------
直接返回你的不就行了吗?
------解决方案--------------------
用一个比较简单的设计模式实现吧

假设这些Form都有共同的功能f1(),f2()但是其内部实现的机理不一样(比如Form1的f1()计算A公司的东东,Form2的f1()计算B公司的东东)

那么,写一个抽象类 BaseForm
Abstract BaseForm
{
f1();
f2();
fn();
}

然后让所有的Form都继承自该抽象类
class Form1 extends BaseForm{}
class Form2 extends BaseForm{}
依此类推

而这段代码:
public void fun(String str){
Object temp = Class.forName(str).newInstance();
//这里怎么实现啊
}

就改成
public void fun(String str){
BaseForm temp = Class.forName(str).newInstance();
}

之后,temp真正是哪个Form,就可以直接使用该Form的功能了,不用进行转换。

另:这个方法还可以用接口实现,不过那就用implements实现而不是用extends实现