既存のかなり大きなシステムで作業しているとしましょう。myObject
クラスのオブジェクトがありますMyClass
(例として、Javaで作業しているとします)。myObject
はCollection
、たとえばa List
と、(私が思うに)無関係な他のオブジェクトを含むコンポジションです。これには、List
それが構成されているメソッドを呼び出す役割を果たしているデリゲートメソッドが含まれていますList
。
これList
がaであるとしましょう。List<String>
何らかの理由で、メインのアクセスメソッドはclassのマスクメソッドですSomeOtherClass
。新しい値のペアをmyに挿入しList
たい場合は、SomeOtherClass
呼び出されたオブジェクトがありますsomeObject
。私が呼び出すmyObject.insert(someObject)
と、insert
メソッド内にを取得してString
に入れる魔法がいくつかありますList<String>
。
今、String
値しか持っておらずSomeOtherClass
、挿入するオブジェクトがないとします。insert
このシステムのすべてを破壊するため、メソッドを変更できないと仮定します。次に、insert
メソッドをオーバーロードする必要がありますか?またはSomeOtherClass
呼び出すたびに新しいオブジェクトを作成する必要がありますinsert
か?
オーバーロードするとこんな感じになりますね…
public void insert(String s) {
...
}
public void insert(SomeOtherObject obj) {
this.insert(obj.magicStringMethod());
}
(この例は、昨日発生したオーバーロードに関する同様の(やや複雑な)状況に基づいた不自然なパズルです。不明な点がある場合は展開します)
これはメソッドをオーバーロードするのに適切な場所でしょうか?そうでない場合、いつメソッドをオーバーロードする必要がありますか?
magicStringMethod()
私の例では、私の場合、どちらがドメインオブジェクトString
でSomeOtherObject
あるかの表現を取得します。