【发布时间】:2017-02-22 10:51:15
【问题描述】:
我有一对类,其中一个的字段是另一个字段的子集,并且超集类的 getter 都可以预见地命名 (getFoo())。是否有某种方法可以有效地将所有公共字段从超集类复制到子集类,或者至少自动生成代码来执行此操作。
我应该注意:
- 由于各种原因,我无法编辑超集类,也无法始终使用它们以避免复制数据。
- 我可以在子类中创建新方法,但不能更改它们的字段。
- 我们有几十个这样的对,有些类有很多字段,所以至少可以说手工操作很笨拙。
- 同事想出了一个方法,创建一个通用的复制方法,使用java反射取任意两个类,以Strings的形式遍历字段,进行字符串操作确定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 - 遗憾的是,超集类是单独开发的外部库的一部分,我现在需要能够将其转换为为这个特定项目创建的类,这些类并没有使用太多较大的信息。
-
如果你把关系颠倒过来,让你的子集类继承自超集类怎么办?您可以使用空主体覆盖与不需要的字段相关的任何方法。它不是太优雅,但至少您无需复制/粘贴、反射或代码生成即可重用代码。
标签: java