将所有字段从一个对象移动到另一个对象

Cat*_*any 4 java oop field object

我能以某种方式将所有字段值从一个对象移动到另一个对象而不使用反射吗?所以,我想做的是这样的事情:

public class BetterThing extends Thing implements IBetterObject {
    public BetterThing(Thing t) {
        super();
        t.evolve(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,该evolve方法会将一个类演变为另一个类.一个说法是<? extends <? extends T>>,其中T的类的对象,你打电话evolve的.

我知道我可以用反射来做到这一点,但反射会伤害表现.在这种情况下,Thing类在外部API中,并且没有方法可以将所有必需字段从它复制到另一个对象.

aio*_*obe 5

正如@OliverCharlesworth指出的那样,它无法直接完成.您将不得不求助于反射(虽然我不推荐它!)或一系列逐场分配.

另一个选择是从继承切换到组合:

public class BetterThing implements IBetterObject {
    Thing delegate;

    public BetterThing(Thing t) {
        this.delegate = t;
    }

    // Thing methods (delegate methods)
    String thingMethodOne() {
        return delegate.thingMethodOne();
    }

    // BetterThing methods
}
Run Code Online (Sandbox Code Playgroud)

这通常被称为装饰器模式.

请参阅:首选组合而不是继承?