只知道2个类的包名字符串,能否进行类型转换
比如A类的包名为a.a,B类的包名为a.b,B类继承A类
我想通过Class.forName("a.b").newInstance()建个B类的实例,然后怎么转换成A类的实例?
因为A类的包名不是固定的,所以不能用a.a A = Class.forName("a.b").newInstance();写死来进行转换
请问怎么才能进行转换?
谢谢

解决方案 »

  1.   

    我是想做个通用的类型转换,这次是A类的包名为a.a,B类的包名为a.b,B类继承A类
    下次可能C类的包名为a.a.a,D类的包名为a.a.b,D类继承C类
    正常的做法是:
    a.a A = Class.forName("a.b").newInstance();

    a.a.a C = Class.forName("a.a.b").newInstance();
    我想能不能用一行代码解决a.a,a.a.a的实例类型转换,因为有时候不确定包名是什么,
      

  2.   

    B要是继承A的话,可以简单的像如下来做
    不要考虑a的包名
    b bb = Class.forName("a.b").newInstance();
    a aa =bb;
      

  3.   


    a aa =bb; a是不固定的字符串,好像必须写死才行
      

  4.   

    这里当然是不行,也没有任何意义。因为你在这里无论写什么,后面代码其实都不能知道里面有什么方法,所以对后面的代码而言Object obj和 a.a.a obj是没有任何区别的,后面的所有方法调用都必须使用反射才可以
      

  5.   

    a.a A = Class.forName("a.b").newInstance();
    包名可以这样用的?
      

  6.   

    包名都不固定怎么Class.forName()啊?你这个需求有点像工厂设计模式
      

  7.   

    是不想强转吗?
    public <E> E getInstance(){
      Class<E> cls = (Class<E>) Class.forName("a.b");
      return cls.newInstance();  
    }a.a a = getInstance();
    a.c c = getInstance();