Скажем, у меня есть два конструктора в моем классе:
public User (List source){
...
}
public User (List source) {
...
}
Предположим, что оба этих конструктора предоставляют одинаковую информацию о пользователе и являются одинаково допустимыми способами создания пользователя для разных вариантов использования.
В Java вы не можете сделать это из-за стирания типов. --Java не принимает два конструктора с параметрами List.
Итак, как это обойти? Что такое решение, которое не является излишним, но при этом уважает основы объектно-ориентированного программирования? Кажется неправильным создавать фабричный метод или другой интерфейс вокруг этого только потому, что Java не имеет сильной поддержки дженериков.
Вот возможности, о которых я могу думать:
1 )Примите List>
в качестве параметра для конструктора и проанализируйте в конструкторе, какая логика вам нужна,или сгенерировать исключение, если это не какой-либо из допустимых типов.
2 )Создайте класс, который принимает любой список, создает соответствующий объект пользователя и возвращает его.
3 )Создайте оболочки вокруг List
и List
, которые вместо этого можно передать конструктору пользователя.
4 )Подкласс этого парня с двумя классами, где наследуется вся функциональность, кроме конструктора. Конструктор одного принимает Source1, другой принимает Source2.
5 )Оберните этого парня компоновщиком, где есть два разных метода компоновщика для двух разных источников данных для инстанцирования.
Мои вопросы таковы:
1 )Является ли это недостатком Java или преднамеренным дизайнерским решением? Что такое интуиция?
2 )Какое решение является самым сильным с точки зрения поддержания хорошего кода без внесения ненужной сложности? Почему?
Этот вопрос аналогичен:Разработка конструкторов на основе стирания типов в Java , но не вдается в подробности, а просто предлагает различные варианты работы -.