Страницы

Поиск по вопросам

вторник, 26 февраля 2019 г.

Как вложить класс в метод?

Есть кусок кода на java
final List advertisements = new ArrayList<>(); new Object() { public void recurse(int i) { advertisements.add(storage.list().get(i)); if (i + 1 < storage.list().size()) recurse(i + 1); } }.recurse(0);
предполагается копирование элементов листа из storage.list() в advertisements таким вот способом, но почему-то по отработке кода лист пустой, что может быть не так?


Ответ

Сложно сказать, почему у Вас что-то не работает. Возможно, проблема в другом коде, который мы не видим. Однако, на одну неточность можно указать сразу - всегда выполняется storage.list().get(0) без проверки списка на непустоту. Это может привести к исключению.
Если же рассматривать идею, то она вполне работоспособная. Вот немного изменённый работающий код:
import java.util.List; import java.util.ArrayList;
class Test { public static void main(String [] args) { final List list1 = new ArrayList<>(); final List list2 = new ArrayList<>();
list1.add("String 1"); list1.add("String 2"); list1.add("String 3");
new Object() { public void recurse(final int i) { if (i < list1.size()) { list2.add(list1.get(i)); recurse(i + 1); } } }.recurse(0);
System.out.println("List 1:"); for (final String s : list1) System.out.println("\t" + s);
System.out.println("List 2:"); for (final String s : list2) System.out.println("\t" + s); } }
Вывод программы:
List 1: String 1 String 2 String 3 List 2: String 1 String 2 String 3

Комментариев нет:

Отправить комментарий