泛型相关问题

时间:2011-03-31 09:04:48

标签: java generics

我的代码如下:

private <A extends AbstractDocument> List<A> reorderDocuments(List<A> docs)
    {
        List<A> newdoclist = new ArrayList<A>();
        for (A o : docs) {
            if(//some condition) {
                //TODO::Generic type
                List<A> tempDocs = new ArrayList<A>();
                tempDocs.add( o );
                tempDocs.addAll(o.getAlikeDocuments());
                //sort method called
            } 
          return newdoclist;
    }

更改了类型的开始标记,函数o.getAlikeDocuments()返回类型为抽象文档的列表,但此方法仍然在行tempDocs.addAll(o.getAlikeDocuments());上给出错误,说明方法addAll(Collection<? extends A>) in类型List不适用于参数(List<AbstractDocument>)。 提前感谢帮助。

谢谢

Vaibhav的

2 个答案:

答案 0 :(得分:3)

您遇到的问题是AAbstractDocument的子类,除了AbstractDocument

的子类外,您不能添加任何A

要使其编译,如果您知道这不是问题,则使用类型擦除。

 tempDocs.addAll((List) o.getAlikeDocuments());

答案 1 :(得分:0)

转换为原始列表可以解决问题

tempDocs.addAll((List) o.getAlikeDocuments());

以下页面可能有助于记住extends和super

的限制

What is PECS (Producer Extends Consumer Super)?