#java
В Java программе необходимо создать объект, но заранее не известно сколько и какие поля будут участвовать в конструкторе. Есть ли возможность во время выполнения добавлять к классу конструктор с необходимым набором параметров?
Ответы
Ответ 1
Есть такой способ хакинга (заранее предупреждаю, что это антипаттерн): Задаемся некой структурой данных описывающих поведение гипотетического конструктора (в реалии конечно же класс с заданным конструктором) - нечто типа псевдоязыка - вполне сойдет какой-нибудь xml/json Парсим псевдоязык и генерируем на лету исходник класса Через ToolProvider вызываем в рантайме компилятор Javа Далее через ClassLoader загружаем объектник класса Далее уже все как обычно: у нас есть ссылка на класс, вызываем через рефлексию его конструктор. Еще раз - так не рекомендуется делать, но иногда так делается. Сам лично когда то делал такую поделушку.Ответ 2
Есть следующие классические пути. В качестве примера используем такой максимальный конструктор public Person(String name, Int age, Double weight) Если вариантов использования конструктора ограниченное количество (т.е., например, всего три варианта: name+age,+weight, name+age, name+weight), то правильным путем будет создание трех конструкторов: public Person(String name, Int age, Double weight){код} public Person(String name, Int age){ this(name, age, 25.4); } public Person(String name, Double weight){ this(name, 78, weight); } Если прямо совсем неопределенное количество аргументов одного класса, то имеет смысл либо передавать их коллекцию: public MyNumbers(Listnumbers){код} Либо использовать конструкцию VARARGS: public MyNumbers(Int... numbers){код} В принципе никто не мешает передавать List
Комментариев нет:
Отправить комментарий