我想动态的对一个Object造型,类名作为String动态传入,大意如下:public void fun(Object o,String str){
Class c=Class.forName(str);
(c)o;
}(c)o;这句话肯定是错误的,我想知道有什么办法能达到这个效果.

解决方案 »

  1.   

    这么做不行吧
    不论怎样你都要将一个object对象变成起子对象,
    而此对象之前并不是该子对象,
    违背JAVA类型转换的原则。
      

  2.   

    不过这样应该可行:
    (未实验。。,猜测)
    public Object fun(String str){
    Class C =Class.forName(str);
    return new C();
    }
      

  3.   

    写错了,应该是
    return C.newInstance()
      

  4.   

    在得到Class对象后,调用newInstance方法就可以创建对象了,当然newInstance返回类型是Object需要做以下类型转换。newInstance()调用类的缺省或无参构造函数,newInstance(Object[])调用带参数的构造函数,参数在Object数组中进行传递,如果参数是int,long等基本类型,可以传递对应的Wrapper,如Integer和Long
      

  5.   

    如果该Object对象确实是C类型就可以,否则会抛出异常的。
      

  6.   

    如果该Object对象确实是C类型就可以,否则会抛出异常的。
    ------------------------------------------------
    你说得很对,问题是 (c)o; 这句代码语法有错.我想知道java有没有类似这样的语法.我并不需要new一个新对象.
      

  7.   

    Class c=Class.forName(str);
    return c.newInstance();
      

  8.   

    楼主的意思是将Object o转型为str所代表的类型,不过这在Java中是做不到的。
      

  9.   

    Class c=Class.forName(className);
    AbstractClass abstract = (ClassName)c.newInstance();AbstractClass  也可以换成接口。在java中最好用接口实现该操作。className 可以动态从外部获取。另className所指向的类,其jar包应该在classpath中配置。或者调用时在当前路径,并指定全路径名(举例如com.ibm.ClassName)
      

  10.   

    楼主的意思是将Object  o转型为str所代表的类型,不过这在Java中是做不到的
    ===========================================================
    真的就没有办法了吗?
      

  11.   

    可不可以用STRING.他是对象类型的.