Я читаю поток, который предоставляет идентификатор (простое int). В зависимости от int следуют разные данные, которые мне нужно превратить в объекты. До сих пор я создавал классы для каждого типа объекта, и каждый класс предоставляет метод read (InputStream input), который считывает любые данные, которые нужно прочитать для этого типа объекта (все классы объектов наследуются от общего базового класса).
Тем не менее, существуют многочисленные идентификаторы и, следовательно, многочисленные классы. Какой самый элегантный способ определить и создать экземпляр класса?
Самый наивный подход, который я попробовал сначала, состоял в том, чтобы иметь блок переключателей для создания экземпляров, но я обнаружил, что он загромождает код (необоснованно). Это также вынуждает меня иметь каждый класс доступным во время компиляции.
Вторая попытка состояла в том, чтобы создать карту, которая отображает каждое int в класс и использует newInstance () для создания объектов. По-прежнему существует проблема, связанная с тем, что мне нужно инициализировать карту, которая требует наличия каждого класса, доступного во время компиляции. Он более или менее просто переместил беспорядок из одного места в другое.
Удаление зависимостей времени компиляции не требуется, это будет просто бонус, если это возможно. Основная цель - избежать стандартного кода.
Ограничения: я не хочу добавлять библиотеку для решения этой проблемы. Отражение хорошо со мной.