外部ライブラリとその API とのインターフェイスを処理するフレームワークを作成しようとしています。その一環として、多くの (70 程度の) 考えられるメッセージ クラスのそれぞれに同じ名前と型を持つヘッダー フィールドを設定する必要があります。残念ながら、ヘッダー フィールドを含む共通の基本クラスから各メッセージ クラスを派生させるのではなく、それぞれが完全に分離されています。
おもちゃの例として:
public class A
{
public Header header;
public Integer aData;
}
public class B
{
public Header header;
public Long bData;
}
A と B がヘッダーを含む基本クラスから派生した場所で、彼らが適切に設計した場合、次のようにすることができます。
public boolean sendMessage(BaseType b)
{
b.header = populateHeader();
stuffNecessaryToSendMessage();
}
しかし現状では、Object が唯一の共通クラスです。私が考えたさまざまなオプションは次のとおりです。
- 種類ごとに別の方法。これは機能し、高速ですが、コードの重複は憂鬱なほど無駄になります。
- 各型をサブクラス化し、共通のインターフェイスを実装させることができます。これは機能しますが、70 以上のサブクラスを作成し、元のメッセージング クラスの代わりにそれらを使用するようにコードを変更することは、橋渡しが行き過ぎています。
- 反射。実行可能ですが、遅すぎると思います(ここではパフォーマンスが問題です)
これらを考えると、それぞれに個別の方法が最善の策のように思えますが、より良いオプションが欲しいです.