Два возможных типа для свойства - PullRequest
0 голосов
/ 14 января 2011

У меня есть класс, который является листом в составном шаблоне. Этот класс имеет свойство, которое может иметь тип A или тип B. Их единственный общий интерфейс имеет тип Object.

Как мне это поддержать.

Я могу

  1. есть метод добавления для каждого типа. Это, однако, означало бы, что у меня должно быть два свойства типа A и B, и я должен проверять нулевое значение, когда я хочу получить правильное свойство.

  2. имеет одно свойство типа Object. Это означало бы, что мне нужно было проверить, какой именно это случай, когда я получаю собственность.

Как лучше всего решить проблему такого типа? Или какие-нибудь лучшие решения?

Ответы [ 2 ]

1 голос
/ 14 января 2011

Лично я бы выбрал подход Object.Документируйте, какие типы объектов может возвращать свойство, и позвольте вызывающему коду использовать доступные языковые функции для определения типа объекта и приведите его при необходимости.Реализация двух свойств является своего рода переизобретением оператора «is-a» вашего языка и быстро станет неуправляемой, если вам когда-нибудь понадобится добавить больше возможных типов.

0 голосов
/ 14 января 2011

Ну, если вы используете язык, который поддерживает абстракцию типов (например, Generics в Java или Templates в C ++), вы можете просто установить это свойство как универсальный тип.Если нет, используйте Object. Наличие метода для каждого типа - просто уродливый хак (и немыслимый, если вы добавите больше типов позже).

...