Если удалить переменную 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());
}
}
}
artur К
47 уровень
Вопрос про анонимные внутренние классы. Почему этот когда выдает ошибку?
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
МирославExpert
26 июля 2022, 10:12
Iterator iter2 = null; ???
То есть если я правильно понимаю то : создав экземпляр с нулевой инициализацией
создается НЕ анонимный экземпляр с ссылкой на нулевые переменные.
wrong number of arguments
значит param[0]= Solution.this; где-то подводит ю Думаю тут - iter2 = (Iterator) constructors[0].newInstance(param);
Могу ошибаться ! Сам учусь! (Поправьте)
0