我要做个动态的强制转换类,   我会动态的知道类名,在强制转换的时候,代码怎么写啊.
比如我有2个类,一个是Student,一个是  Teacher,我想问下
在写反射的时候,我会有个动态的字符串得到类名,
String className="Student";
构建新类,用的是Class.forName();
但我不熟悉强制转换怎么写
 Student a= (Student)el;

解决方案 »

  1.   

    Student a= (Student)Class.forName(className).newInstance();
      

  2.   

    String o1name="student",o2name="teacher";
    Object o1=Class.forName(o1name),o2=Class.forName(o2name);
    o1=(o2.getClass()) o1;
      

  3.   

    Class c = Class.forName(classname); 
    Object oo = c.newInstance();
    Student stu = null ;
    if(oo.getClass()==Student.class) {   //型别检查
          stu = (Student)oo;  
    } 不知道这段代码是不是可以满足你的要求,不过在轻质转换前,最好检查一下做一下RTTI
      

  4.   

    Class.forName(className).newInstance();已经生成了className类形的一个instance。如果className是一个已知类(AnyClass)的派生类,则AnyClass ac = Class.forName(className).newInstance();自动upcast,不需要明确cast。我想你的意思是要在RTTI的基础上使用downcast。这种情况下你可能需要把className downcast到他的derived class,即DerivedClass dc = (DerivedClass)Class.forName(className).newInstance();而你在compile-time却不知道DerivedClass的具体名字,而DerivedClass也要如className一样于runtime通过String类型得到,所以上述cast无发进行。由于downcast是compiler通过RTTI再compile-time进行的,方法bind已经在该时期完成。我认为反射机制无法在runtime进行这种动态downcast,建议直接用DerivedClass进行newInstance()。
      

  5.   

    sorry,写错了一点:AnyClass ac = Class.forName(className).newInstance();自动upcast,不需要明确cast。
    需要明确cast,应该为AnyClass ac = (AnyClass)Class.forName(className).newInstance();