Java中的`*this = rhs`?

Hot*_*ead 12 c++ java

我来自C++世界,我找不到以下的Java替代方案(如果有的话):

struct SomeStruct
{
    SomeStruct(){}
    SomeStruct(const SomeStruct& rhs)
    {
        *this = rhs;
    }
};
Run Code Online (Sandbox Code Playgroud)

我需要这个的原因是我有一个现有对象的缓存,所以我不想创建另一个实例,只是为了'克隆'现有的实例,如下所示:

public class SomeObject
{
    private static Hashtable _objects;
    SomeObject()
    {
        SomeObject obj = _objects.get(some_key);
        if (obj != null) {
            // *this = obj;
            // instead of: 
            // this.something = obj.something;
            // this.something1 = obj.something1;
            // this.something2 = obj.something2;
            // a zillion fields....
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

编辑:

对不起,我混淆了一些事情(仍然需要学习Java和C++).

谢谢

Mar*_*ers 7

最接近Object.clone()但首先阅读Effective Java的相关部分.

如果删除了一些要求,可能有更简单的方法可以做你想要的.例如,如果使对象不可变,则不需要将数据复制到另一个对象中.相反,您可以返回对原始对象的引用.这比成员副本快得多,并且还有许多其他好处,例如使编写线程安全的代码更容易.

  • -1:这会创建一个他想避免的新实例. (3认同)

Eri*_*rik 7

没有直接的等价物.Object.clone()是最接近的,但它创建一个新实例并执行浅拷贝.你可以用反射写一些通用的东西.