Java 将所有场从一个对象移动到另一个对象

Java 将所有场从一个对象移动到另一个对象,java,oop,object,field,Java,Oop,Object,Field,我是否可以在不使用反射的情况下将所有场值从一个对象移动到另一个对象?所以,我想做的是这样的: public class BetterThing extends Thing implements IBetterObject { public BetterThing(Thing t) { super(); t.evolve(this); } } 因此,evolve方法将从一个类进化到另一个类。一个参数是,您应该尝试通过使用一个库来最小化性能影响,该库

我是否可以在不使用反射的情况下将所有场值从一个对象移动到另一个对象?所以,我想做的是这样的:

public class BetterThing extends Thing implements IBetterObject {
    public BetterThing(Thing t) {
        super();
        t.evolve(this);
    }
}

因此,
evolve
方法将从一个类进化到另一个类。一个参数是
,您应该尝试通过使用一个库来最小化性能影响,该库通过缓存结果来支持反射操作。看看Apache或

正如@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
}
这通常被称为


请参阅:

您可以以更便宜的方式使用反射。我制作了一个应用程序,当我第一次运行程序时,我将属性名称、getter和setter方法保存在一个映射中,当我需要提取属性时,我只调用传递对象的相同方法来调用它。这比每次需要克隆时使用反射来获取方法对象具有更好的性能


另一种方法可能是使用类似Jackson之类的序列化程序,但这将是一项昂贵的序列化和反序列化任务。

您可以选择(a)反射或(b)显式成员分配……或从继承切换到合成。如果您说这是在外部API中,我想这里面没有进化的方法。这本质上是一种进化吗?@jaco0646:在我看来是这样的。1+