本帖最后由 xodbc 于 2012-08-27 13:08:17 编辑

解决方案 »

  1.   


    <T extends A> T[] toArray(Class<? extends A> cla) {
    T[] ret = (T[])Array.newInstance(cla, list.size());
    return  (T[])list.toArray(ret);
    }
      

  2.   

    我看你的toArray(Class<T>cla)方法体内,
    参数Class<T>cla根本就没有用到。
      

  3.   

    看代码有点晕,楼主好像把自己搞乱了。
    如果是一个A类型的List想要转换成C类型的数组,这样就行了:List<A> list = new ArrayList<A>();
    list.add(new A());
    list.add(new A());

    C[] c = (C[])list.toArray(new C[list.size()]);另外A类型转成C类型,是向下转换,实际中能不能转还要看实际的对象是什么。向上转换可以不用担心。
      

  4.   

    可行,另外如果没有cla怎么创建?代码没贴过来,cla是用来new实例往list里放的。
    的确是,本来想通过通配符进行向下匹配,但发现行不通,用? extends A输出用? super C输入,但到数组那里就不知道如何处理了
      

  5.   

    list.toArray();的时候要传入list指定泛型的数组...
    如:
    List<String> list = xxx;
    String[] strarr = list.toArray(new String[list.size()]);
      

  6.   

    我的代码中已经指定了泛型T的父类B的数组,而声明时使用的类型是B的父类A,如果严格限定类型间的关系应如何写?说实话,糊涂了,用上泛型以后就没明白过,我尝试过获取泛型的签名,但发现获取的都是T、E什么的,大家贴出来的泛型获取方法都是获取写死的泛型类型,而不是运行时传入的类型,不过我还是想去掉cla
      

  7.   


    yes。 在你代码上改的。 忘记删了。 看来楼主懂啦 :)