Conversation
| constructor.setAccessible(true); | ||
| Object instance = constructor.newInstance(params); | ||
| return instance; | ||
| } |
There was a problem hiding this comment.
У нас в целом задача -- создание разнообразных объектов случайных. Как на счет идеи пройтись по полям и случайно их сгенерировать?
There was a problem hiding this comment.
Кажется сейчас я могу подать на вход любой класс какой хочу и ваш алгоритм попытается его обработать... Что будет если я подам не Generatable класс?
There was a problem hiding this comment.
Можно не переделывать, но обратите внимание на Collection.class.isAssignableFrom (аналогично для Map). Упростит ли это как то задачу?
There was a problem hiding this comment.
Спасибо. Все равно исправил, да упрощает, делает возможным не заходить в функцию генерации мапы/листа если обьект таковым не является
| { | ||
| int randomSize = random.nextInt(100); | ||
| for (int i = 0; i < randomSize; i++) { | ||
| map.put(String.valueOf(i), new Object()); |
There was a problem hiding this comment.
На самом деле таки есть способ получить типы из коллекций вроде есть.
Подсказка -- посмотрите на наследников Type, кажется там есть ParameterizedType
Если что, поресерчьте репы некоторых одногруппников. Эта штука не самая очевидная и распространенная
Просьба потом отписать, как оно устроено и почемы мы можем получить типы несмотря на стирание
There was a problem hiding this comment.
Да, это можно сделать, проблема в том что type erasure работает на уровне рантайма, но данные остаются в метаданных обьявления переменной. Но такое не будет работать для обьектов которые созданы прям совсем на лету
Я исправил код и попробовал сгенерировать класс с джеенрик типом, результат:
Generated org.example.classes.Cart@34a245ab
With attributes:
Field items with type:interface java.util.List and value:[org.example.classes.Product@12edcd21, org.example.classes.Product@34c45dca, org.example.classes.Product@52cc8049]
Все получилось
There was a problem hiding this comment.
Какая то странная проверка, напомните пж -- зачем она?
There was a problem hiding this comment.
Изначально подумал что если класс в аттрибутах имеет обьекты своего же класса - то такие обьекты не стоит генерировать. Когда показывал лабу обсудили что лучше поставить лимит рекурсии
There was a problem hiding this comment.
Исправил. Теперь подобные обьекты могут создаваться, без возврата null
|
Добавил так же обсуждаемое поведение по интерфейсам - теперь если передается интерфейс то будет создаваться класс, который имплементирует его, а не возвращает null |
No description provided.