创建对象列表时键入不匹配

时间:2015-06-11 22:50:25

标签: java arraylist

我正在尝试将mainList arraylist分成3个子列表Arraylist,然后将其作为子列表添加到其他arraylist mainSublist中,但我收到此错误:  我该如何解决?

我感谢任何帮助。

  

1) - 类型不匹配:无法从List转换为ArrayList

     

2) - ArrayList类型中的方法add(RootCreator)不适用于参数(ArrayList)

代码:

    ArrayList<RootCreator> mainList = new ArrayList<RootCreator>();
    for (String key : names) {
        RootCreator rootcreat = join_line(path, key);
        mainList.add(rootcreat);
    }
    ArrayList<RootCreator> mainSublist = new ArrayList<RootCreator>();

    for(int i= 0 ; i < mainList.size(); i++){
        int index = i*3;    
        //the error 1 is here       
        ArrayList<RootCreator> sublist = mainList.subList(0, index);
         //error 2 is here
        mainSublist.add(sublist);
    }

3 个答案:

答案 0 :(得分:1)

所有列表都不是ArrayList,因此当您使用子列表时,您将获得一个通用列表。另一方面,将集合添加到另一个集合的方法是addAll而不是添加。

List<RootCreator> mainList = new ArrayList<RootCreator>();
for (String key : names) {
    RootCreator rootcreat = join_line(path, key);
    mainList.add(rootcreat);
}
List<RootCreator> mainSublist = new ArrayList<RootCreator>();

for(int i= 0 ; i < mainList.size(); i++){
    int index = i*3;    
    //the error 1 is here       
    List<RootCreator> sublist = mainList.subList(0, index);
     //error 2 is here
    mainSublist.addAll(sublist);
}

答案 1 :(得分:0)

subList方法返回List,而不是ArrayList,并且您无法将List分配给ArrayList。事实上,List方法返回的subList不是ArrayList

如果需要ArrayList,请在子列表中创建ArrayList

ArrayList<RootCreator> sublist = new ArrayList<>(mainList.subList(0, index));

如果您只需要List,请改为sublist List

List<RootCreator> sublist = mainList.subList(0, index);

您无法向ArrayList<RootCreator>添加ArrayList<RootCreator>;您必须添加RootCreator。如果您要将sublist的元素添加到其他列表,请使用addAll方法。

mainSublist.addAll(sublist);

答案 2 :(得分:0)

好的,我们来看看这两个错误:

//the error 1 is here       
ArrayList<RootCreator> sublist = mainList.subList(0, index);

这告诉您,您正在尝试将类型为List的内容分配给声明为ArrayList的变量。虽然ArrayListList的子类型,但它不能同时发挥作用 - 您可以将ArrayList分配给List,但反之亦然。所以让我们改变你的声明:

//the error 1 was here, but fixed.        
List<RootCreator> sublist = mainList.subList(0, index);

第二个略有不同:

//error 2 is here
mainSublist.add(sublist);

在这里,您已经定义了一个列表来保存RootCreator类型的项目 - 但是您没有添加RootCreator个项目,而是添加了一个列表。因此,如果您想要列出 hold 其他列表,则需要在创建时指定:

ArrayList<List<RootCreator>> mainSublist = new ArrayList<List<RootCreator>>();

但是,如果您只是想保留一个列表并希望添加子列表中的所有内容,那么请将代码更改为:

//error 2 was here, but Fixed
mainSublist.addAll(sublist);