例如
Public Object getClassInstance(String strClassName)
{
return ...;
}
调用时写getClassInstance("ArrayList"),于是得到一个ArrayList的实例?在调用程序中再如何将返回的Object转换为ArrayList类型?
.net中反射可以做到上述要求,不知JAVA怎么做。
谢谢! 

解决方案 »

  1.   

    Object a = Class.forName("xx.xxx.Xxx").newInstance();
    转为为ArrayList的时候,用(ArrayList)a就行了
      

  2.   


    import java.util.*;public class Test
    {
    public static void main(String [] args)
    {
    try
    {
    ArrayList al = (ArrayList)Class.forName("java.util.ArrayList").newInstance();
    }catch(Exception e)
    {}
    }
    }
      

  3.   

    java一样也有反射,可以从远端接受到字节流然后组装成你要的类。
      

  4.   

    谢谢上面二位回复,可是在调用端把Object再还原成ArrayList时,
    (Class.forName(strClassName))object好像就不行了,至少我这里这句话下面被画红线了。这个有办法吗?谢谢!
      

  5.   

    不明白你要干什么~`
    为嘛要(Class.forName(strClassName))object这样写
      

  6.   

    大家好,我是楼主,我要(Class.forName(strClassName))object这样写的目的是程序可以与对象的具体类型彻底无关,实现更大的灵活性。不知是否可行?谢谢!
      

  7.   

    彻底无关,你都用Object类型不就行了?
      

  8.   

    Class.forNanme().newInstance()反回的是一个Object
    只需要强制转换就行了啊
    Object o = Class.forName("java.util.ArrayList").newInstance();
    ArrayList al = (ArrayList)o;
    就行了啊。
      

  9.   

    外面的类肯定得知道这个Object到底完成了什么样的功能,否则 你程序如何的设计?所以一般来说你可以先定义一个接口类,如List这样
    至于实现类是什么还有些什么样的额外方法就可以不理会了List list = newList("java.util.ArrayList")类似写法。
      

  10.   

    java的反映还有带参数的实例化、数组等,在网上都可以找到相关的样例代码的。
      

  11.   

    大家好,我是楼主,我要(Class.forName(strClassName))object这样写的目的是程序可以与对象的具体类型彻底无关,实现更大的灵活性。不知是否可行?谢谢!
    ______________________________在目前版本的JDK中不可以。强转的类型必须显示地声明,一般可以强转为object的父类或者接口。
      

  12.   

    这样太自由了,java貌似不允许,最好定义一个通用的接口,然后统一转换成该接口类型就行了