Вернуть экземпляр анонимного класса

256
28 августа 2017, 06:45

Допустим, есть метод, который должен возвращать экземпляр анонимного класса. Делаю всё, как в этой статье, но при запуске выкидывает следующее:

    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());
        }
    }
Answer 1

Ошибка говорит о том, что при создании экземпляра класса, в конструктор передано неверное кол-во аргументов, пример кода для создания экземпляра:

                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);
READ ALSO
Класс Matrix оцените реализацию

Класс Matrix оцените реализацию

Часто слышал про задачки, типо реализуйте класс для матриц, комплексных чисел и тд

232
Отслеживание загрузки классов

Отслеживание загрузки классов

Есть приложение desktop на javaХочу сделать картинку предзагрузки

279