Допустим, есть метод, который должен возвращать экземпляр анонимного класса. Делаю всё, как в этой статье, но при запуске выкидывает следующее:
Exception in thread "main" iterator item 1
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.javarush.task.task24.task2410.Solution$1.<init>(Solution.java:24)
at com.javarush.task.task24.task2410.Solution.getIterator(Solution.java:16)
at com.javarush.task.task24.task2410.Solution.main(Solution.java:36)
Process finished with exit code 1
Вот код:
public Iterator getIterator(final String name) throws Exception {
return new Iterator() {
Constructor c = (Constructor) (this.getClass().getDeclaredConstructors())[0];
Object[] params = new Object[1];
{
countItems++;
System.out.println(name + " item " + countItems);
params[0] = this;
}
Iterator it = (Iterator) c.newInstance(params);
@Override
public Iterator next() {
return it;
}
};
}
public interface Iterator {
Iterator next();
}
Отмечу, что задачу нужно решить именно с помощью анонимного класса.
Код для тестирования:
public static List<Iterator> iterators = new LinkedList<>();
public static void main(String[] args) throws Exception {
Solution solution = new Solution();
Iterator iterator = solution.getIterator("iterator");
for (int i = 1; i < 5; i++) {
iterators.add(iterator.next());
}
}
Ошибка говорит о том, что при создании экземпляра класса, в конструктор передано неверное кол-во аргументов, пример кода для создания экземпляра:
Constructor c = (Constructor) (this.getClass().getDeclaredConstructors())[0];
// массив типов параметров конструктора
Class[] parameters = c.getParameterTypes();
Object[] params = new Object[parameters.length];
// заполняем массив параметров для конструктора
for(int i = 0; i < parameters.length; i++){
params[i] = parameters[i].newInstance();
}
it = (Iterator) c.newInstance(params);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Часто слышал про задачки, типо реализуйте класс для матриц, комплексных чисел и тд