Если удалить переменную Sting name из анонимного класса то проблема решается или если приравнять ее к полям класса Solution, вопрос почему так происходит???? import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.LinkedList; import java.util.List; /* Рефакторинг, анонимные классы */ public class Solution { public static List<Iterator> iterators = new LinkedList<>(); private int countItems; private String name; public Iterator getIterator(final String name) { this.name = name; Iterator iter = new Iterator() { { countItems++; System.out.println(name+" item " + countItems); } @Override public Iterator next() throws InvocationTargetException, InstantiationException, IllegalAccessException { Constructor[] constructors = this.getClass().getDeclaredConstructors(); Object[] param = new Object[1]; param[0]= Solution.this; Iterator iter2 = null; iter2 = (Iterator) constructors[0].newInstance(param); return iter2; } }; return iter; } public static void main(String[] args) throws InstantiationException, IllegalAccessException, InvocationTargetException { Solution solution = new Solution(); Iterator iterator = solution.getIterator("iterator"); for (int i = 1; i < 5; i++) { iterators.add(iterator.next()); } } }