2015-06-11 3 views
1

я пытаюсь расстаться с mainList ArrayList до 3 подсписков Список_массивов, а затем добавить его в качестве подсписка в других ArrayList mainSublist, но я получаю эту ошибку: Как я могу это исправить?Несоответствия типов при создании списка объектов

Я ценю любую помощь.

1)-Type mismatch: cannot convert from List to ArrayList

2) -The method add(RootCreator) in the type ArrayList is not applicable for the arguments (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); 
    } 
+0

Как вы думаете, что означают ошибки? Каков тип возврата 'subList'? Каков тип параметра (тип ожидаемого аргумента) 'add'? –

+0

@SotiriosDelimanolis: Mao, но когда я меняю его на карту, я получаю 'Невозможно создать тип List '? как это исправить? – TheBook

+0

использовать это для ошибки 1- Список sublist = mainList.subList (0, index); ошибка 2 - mainSublist.addAll (подсвечник); –

ответ

1

Все Список не ArrayList, поэтому, когда вы используете Подсписок вы получаете общий список. С другой стороны, метод добавления коллекции в другую коллекцию - addAll вместо add.

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); 
} 
0

Метод subList возвращает List, не ArrayList, и вы не можете назначить List к ArrayList. Фактически, List, возвращенный методом subList, не является 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); 
0

Хорошо, давайте посмотрим на две ошибки здесь:

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

Это говорит вам, что вы пытаетесь присвоить что-то типа List к переменной, которая объявлена ​​как ArrayList. Хотя ArrayList является подтипом List, он не работает в обоих направлениях - вы можете назначить ArrayListList, но не наоборот. Так давайте изменим ваше заявление:

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

Второй немного отличается:

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

Здесь у вас есть список, определенный для хранения элементов типа RootCreator - но вы не добавляете RootCreator, вы добавляете их список.Так что если вы хотите иметь список держать другие списки, необходимо указать, что при ее создании:

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

Но, если вы пытаетесь просто держать один список и хотите добавить все из затем замените свой код на:

//error 2 was here, but Fixed 
mainSublist.addAll(sublist); 
Смежные вопросы