私は、1つのフィールドが別のフィールドのサブセットであり、スーパーセットクラスのゲッターがすべて(getFoo()
)という名前のクラスを持っています。 に効率的にのすべての共通フィールドをスーパーセットクラスからサブセットクラスにコピーするか、少なくともそのようにコードを自動生成します。Javaの類似クラス間のフィールドをコピーする
私はそれを注意する必要があります。さまざまな理由
- を、私はスーパーセットクラスを編集することはできません、また私はただのデータコピーを行うことを避けるために全体にそれらを使用することができます。
- サブセットクラスで新しいメソッドを作成する可能性がありますが、フィールドを変更することはできません。
- これらのペアは数多くあり、いくつかのクラスには多くのフィールドがありますので、これを手作業で行うのは難しくありません。
- 同僚は、Javaリフレクションを使用して2つのクラスを取り、フィールドを文字列として反復し、文字列操作を行ってゲッター名を決定し、それを実行して自動的に設定するジェネリックコピーメソッドを作成する方法を考え出しましたサブセットクラスのフィールド。ひどいですが、うまくいくようです。私は本当に良い方法があることを願っています。
編集:要求された
public class SuperClass {
private int foo;
private int bar;
private float bat;
public int getFoo() { return foo; }
public int getBar() { return bar; }
public float getBat() { return bat; }
}
public class SubClass {
private int foo;
private float bat;
}
//wanted
public static copySuperFieldsToSubMethod(Object super, Object sub) { ??? }
// also acceptable would be some way to autogenerate all the assignment
// functions needed
スーパーセットクラスを編集できる場合は、サブセットクラスを拡張し、すべてのフィールドとメソッドを古典的なOOの方法で継承することができます。なぜあなたはスーパーセットクラスを編集できませんか? – Asaph
@Asaph - 悲しいことに、スーパーセットクラスは、別々に開発された外部ライブラリの一部であり、現在は、この特定のプロジェクト用に作成されたクラスに変換する必要があります。 。 – Dusty
関係を逆さにして、サブセットクラスをスーパーセットクラスから継承させた場合はどうなりますか?空のボディでは必要のないフィールドに関連するメソッドをオーバーライドすることができます。あまりエレガントではありませんが、少なくともコピー/ペースト、リフレクション、コード生成なしでコードを再利用できるようになります。 – Asaph