你为什么非要转化成(MyClass)呢?他本来就是MyClass类型的,只不过用一个Object的引用罢了,调用里面的方法没问题呀。

解决方案 »

  1.   

    就像
    String str = "this is a string";
    Object str_obj = str;
    System.out.println(str_obj.toString());str_obj虽然是Object但是他指向的是String,所以toString()调用的是String的方法。
      

  2.   

    问题已经被我解决,用java.lang.reflection可以解决!谢谢各位。qq:7409844
      

  3.   

    你是说Class.forName()不成功吧,强制转化没有问题啊
      

  4.   

    如果是动态加载就不能采用强制转换类型这种方法。因为我们并不知道这个类到底是Class到底是什么class。也就说如果你用这些代码:
    String className="MyClass";
    Clsss iClass = Class.forName(className);
    Object iObj =iClass.newInstance();
    生成了iObj,你确实不能用classname来动态转换。
    如果要使用这个生成的object应该怎么办呢?
    我假设你的MyClass如下定义。
    public class  MyClass
    {
    public MyClass(){
    }
    public  void sayHello(String who)
    {
    System.out.println("hello world "+who);
    }
    }
    如果要动态的使用sayHello,可以用如下代码
    import java.lang.reflect.*;
    class  TestClass
    {
    public static void main(String[] args) 
    {
                      //这是sayHello的参数类型为String
    Class[] parameterTypes={String.class};
                      //准备把you这次字符串传进去
    Object[] parameter={"you"};
                      //以下是动态装入的类名和需要调用的函数名
    String className="MyClass";
    String methodName="sayHello";
    try{
    Class iClass=Class.forName(className);
                      //产生一个Method对象(sayHello)
    Method method=iClass.getMethod(methodName,parameterTypes);
                      //Class.forname只是动态的装入了类,我们还需要产生对象,因此
                      //需要调用它的构造函数,用以下方法调用
    Constructor con=iClass.getConstructor(new Class[]{});
    Object myclass=con.newInstance(new Object[]{});
                      //对象生成啦,现在调用它
    method.invoke(myclass,parameter);

    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }
    上面的代码答应hello world you
    这段代码等同于
    MyClass myclass=new MyClass();
    myclass.sayHello("you");
    由此可以看出动态的调用比静态的复杂得多。具体的api函数请参考java api
      

  5.   

    是java.lang.reflect.Method里的invoke方法。