我有一對類,其中一個字段是另一個字段的子集,超集類的getter都是可預測命名的(getFoo()
)。有沒有辦法有效地將超集類的所有常用字段複製到子集類,或者至少自動生成代碼來執行此操作。在java中類似類之間的複製字段
我應該注意的是:
- 由於種種原因,我不能編輯超類,我也可以只使用它們整個以避免做數據複製。
- 我可以在子集類中創建新方法,但我無法更改它們的字段。
- 我們有幾十個這樣的對,有些類有很多很多的領域,所以這樣做是很笨拙至少可以說。
- 一位同事想出了一種創建通用複製方法的方法,該方法使用java反射來獲取任意兩個類,以字符串形式遍歷字段,執行字符串操作以確定getter名稱,然後執行它以自動設置子集類中的字段。這很糟糕,但它似乎工作。我真的希望有更好的方法。
編輯:一些簡單的代碼的要求
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 2010-12-09 05:04:02
@Asaph - 可悲的是,超集類是外部庫的一部分,它是單獨開發的,我現在需要能夠轉換爲爲特定項目創建的類,這些類不利用大型信息中的大部分信息。 – Dusty 2010-12-09 05:08:05
如果將關係顛倒過來並使子集類繼承自超集類,該怎麼辦?您可以覆蓋任何與空身不需要的字段有關的方法。它不是太優雅,但至少你可以在不復制/粘貼,反射或代碼生成的情況下重新使用代碼。 – Asaph 2010-12-09 05:16:17