在不知道集合的具体类型的情况下,如何创建一个Collection。
集合的具体类型可能是List、Set,也可能是ArrayList等等如何用反射来创建一个Collection?

解决方案 »

  1.   

    Collection<?> collection = (Collection<?>)Class.forName("java.util.ArrayList").newInstance();
      

  2.   

    1楼的跟lz的清静不符合,1楼已经明确知道了是arrayList
      

  3.   


    人家举个例子是ArrayList,你那class字符串你总要传来,那不就是动态的了,那现在不知道具体是Collection的子类是什么,到时候你用的时候肯定是知道的啊,到时候你就可以换传过来的那字符串啊。
    这就是JAVA多态的强大表现
      

  4.   

    Collection<?> collection = (Collection<?>)Class.forName("java.util.ArrayList").newInstance();你睜大眼睛,既然用反射,還要強制轉換為(Collection<?>)?
      

  5.   

    因为楼主在标题中说了创建一个 Collection 所以我就强转了。至于写死的 java.util.ArrayList 只是个例子,实际情况可以将 Collection 实现类的完整类名传进去就可以了。当然了,如果是自己实现 Colllection 的话,留一下空的构造方法吧。
      

  6.   


    不强转也可以,直接用 Object 对象吧。但这样做的话,之后调用 Collection 中的相关方法还是需要使用反射来调用。创建对象的目的就是为了使用方便!
      

  7.   


    1、lz說的不太清楚。
    2、既然傳入的是個動態字符串,
    是否應該這樣做呢?
    Class<?> class1 = Class.forName("java.util.ArrayList");
    if (Collection.class.isAssignableFrom(class1)) {
    Collection collection = (Collection) class1.newInstance();
    System.out.println(collection.getClass());
    }
      

  8.   

    Object.getClass; 只要有实例,不管是什么类,就能知道是什么类型。