外部 API の呼び出しからFoo型のオブジェクトをいくつか取得します。ローカルで、少し追加された情報でこれらのオブジェクトを処理したいので、これらの余分なフィールドを追加するサブクラスFooSonがあります。取得したすべてのオブジェクトを新しい継承された型に変換するにはどうすればよいですか? これらのオブジェクトは実際にはFooSonではないため、ダウンキャストはオプションではないようです。
私が思いついた唯一の解決策は、Fooオブジェクトを引数として取り、すべてのパブリック/保護された値を新しいFooSonオブジェクトにコピーして返す変換関数を作成することです。
欠点は次のとおりです。
- 情報(私的価値)の喪失
- Fooが変更された場合は、convert 関数を適応させる必要があります。
クラス Foo は、コピー コンストラクターまたはクローン オペレーターを実装しません。私は Foo のソース コードを持っていますが、将来のリリースとの互換性を維持するために変更を避けたいと考えています。それにもかかわらず、それが唯一の実行可能な代替手段である場合は、必要なものを取得するために Foo の実装を変更します。