我知道一个类的名儿,比如:"com.common.MyClass"但是在我自己的类中不能用这个来定义他的一个实例,因为这个类的名儿可能会变化,请看下面:
class A{
    // com.common.MyClass obj; 不能这样定义
    Object obj = Class.forName("com.common.MyClass").newInstance();
    // 上面一句,生成一个自定义类的实例,但是我怎样才能把obj强转成com.common.MyClass这个
    // 类型呢???或者说怎么样直接把obj定义成com.common.MyClass的类型???(动态的来定义)
    // 请高手们指教啊!!!
}

解决方案 »

  1.   

    Object obj = Class.forName("com.common.MyClass").newInstance();com.common.MyClass o = (com.common.MyClass )obj这样不就ok了
      

  2.   

    好像没有办法,如果是要调用MyClass的函数的话还是有办法的
    比如:
    obj所属的类有toLog方法,toLog(String str,Integer i),可以用下面的代码调用这个函数
    Object obj = Class.forName("com.common.MyClass").newInstance();
    Method logMethod = obj.getClass().getMethod("toLog",new Class[] { String.class, Integer.class });
    Object logobj = logMethod.invoke(obj, new Object[] { "something",new Integer(7) });
      

  3.   

    你可以把类名写到一个xml文件里,可以根据需要随时修改。
      

  4.   

    既然类名可能变化,那么类的方法和属性也是可能变化的,你不能确定一个类的名字,就不能确定其实例对象能调用的方法,所以要实现你说的这种形式是不可能的!
    不过你要得到这个类的对象,无非是想调用其方法,或者访问其属性,通过java的反射机制,是完全可以做到的,所以要实现你想要的功能,还是可行的!
      

  5.   

    调用里面的方法可以用反射,但是类是变化的,不同的类里面的方法不一样,反射也不能解决全部问题。
    我觉得你还是得定义一个接口,然后全部的类都实现这个接口,然后把newInstance()强制转换成接口类型。
    下面通过接口调用接口的方法。