我有一个string值为String s="com.Demo"
com.Demo有个接口“com.Father"
然后Class<com.Father> f=Class.forName(s)
com.Father ff=f.newInstance();
我的问题是如果我要把f生成的实例转化成com.Demo,那我就com.Demo demo=(com.Demo)f.newInstance();
上面的括号里的com.Demo我就要自己手动写,但是我如果我又很多com.Father的子类通过这种方式生成实例,那我不是每次都要手动来转化成子类的实例
我虽然都是继承接口,但是每个子类里都有接口里没有的方法,所以我要转化成原始的子类
但是像这样的转化有没有别的方法,不写成(com.Demo),而是我只知道s字符串代表的类,
com.Demo demo=(com.Demo)f.newInstance();
有没有类似于这样的方法ff.transferObject(s),然后就会吧ff转化成它的子类

解决方案 »

  1.   

    你就是要调用哪个类的方法,如果你通过反射获得到他的类,那么也可以通过反射调用方法与获得数学,这样你就可以动态的通过字符串调用方法,而不需要强转直接调用。
    具体怎么使用,你自己查查反射api
      

  2.   

    不用转换,通过反射的方式来访问
    Class c = Class.forName("com.Demo");
    Method m = c.getDeclaredMethod("xxx", new Class[]{yyy.class, zzz.class, ...});
    Object o = c.newInstance();
    m.invoke(o, new Object[]{args1, args2, ...});
      

  3.   

    前几天有人问过类似的问题,楼主可以看看这个
    http://topic.csdn.net/u/20110628/12/a92d27d0-808e-455a-93f0-2ec556792b49.html具体来说是不需要转,你可以直接调用该实例的方法
                Object o = Class.forName("com.Demo").newInstance();
                Method m = o.getClass().getMethod("method-name", new Class[]{class1,class2...});
                Object result = m.invoke(o, new Object[]{param1,param2...});