2011-01-14 9 views
0

私は複合パターンの葉であるクラスを持っています。このクラスは、タイプAまたはタイプBのいずれかになることができるプロパティを持ちます。それらの共通インターフェイスはObjectタイプのみです。プロパティの2つの可能なタイプ

これはどのようにサポートする必要がありますか?

私は

  1. は、各タイプのAddメソッドを持つことができます。しかし、これは、タイプAとタイプBの2つのプロパティを持つ必要があり、正しいプロパティを取得したいときにnullをチェックする必要があることを意味します。

  2. には、Object型のプロパティが1つあります。それは私がプロパティを取得したときのインスタンスの種類を確認するためにチェックしなければならないことを意味します。

このタイプの問題を解決する最適な方法は何ですか?それとももっと良い解決策ですか?

答えて

1

個人的に私は単一のObjectプロパティアプローチを選択します。プロパティが返すオブジェクトのタイプを文書化し、呼び出しコードに使用可能な言語機能を使用させてオブジェクトタイプを決定し、必要に応じてキャストするようにします。 2つのプロパティを実装することは、あなたの言語の「is-a」演算子をある程度再発明することであり、可能な型を追加する必要がある場合はすぐに管理できなくなります。

0

よくタイプの抽象化をサポートする言語(Javaの[ジェネリックス]や[C++のテンプレート]など)を使用している場合は、そのプロパティを汎用タイプとして設定できます。そうでない場合は、Objectを使用します。各タイプのメソッドを持つことはちょうど醜いハックです(後でタイプを追加すると、思いがけないものになります)。

+0

私はOPがジェネリックが適用されないケースを示していると思います。例えばオブジェクトを処理するすべての人が*どのタイプのオブジェクトを含むかを事前に知っているわけではなく、その型を使用するには事前に汎用引数を知っておく必要があります。 – cdhowie

関連する問題