如下: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();
    //这里怎么实现啊

解决方案 »

  1.   

    晕,我当然知道已经实现了我是要在不出现 MyForm1,MyForm2...(可能对应100个,那我要判断100次啊)的情况下实现上面的代码!!!
      

  2.   

    这种情况 只能定义一个所有Form的一个公共的接口然后通过接口操作实际的对象
      

  3.   

    你的MyForm都做了什么操作??如果它们有共同的基类可用,就向上转型为共同基类。如果没有,就用反射访问吧。
      

  4.   

    to--sswhsz() 
    每个MyForm都是一个JavaBean,他在Hibernate配置文件中关联对应的表
    且我需要的这些MyForm类的内容是相同的.
      

  5.   

    方法名相同??Class clazz = Class.forName(str);
    Object form = clazz.newInstance();
    Method method = clazz.getMethod("methodName", new Class[]{/*参数类型*/});
    Object retValue = method.invoke(form, new Object[]{/*实际参数*/});
      

  6.   

    且我需要的这些MyForm类的内容是相同的.什么意思
      

  7.   

    我是说这些Form都是为了对应不同的表
    而这些不同的表的结构是相同的
      

  8.   

    TO_interpb(曾曾胡,深怕情多累美人!) MyForm 为父类
    MyForm myForm = (MyForm) Class.forName(str).newInstance();或
    MyForm myForm = new MyForm();
    这样的话,我怎么操作对应的表啊??
      

  9.   

    用一个比较简单的设计模式实现吧假设这些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实现