开发者

how do i create a copy of an object in java, instead of a pointer

Lets say i have an object that i created. I edited some values in it so it is different than the new object() that i referenced. Lets call that object f1. Now i want another object called f2 to be a copy 开发者_JAVA百科of f1 but not a pointer, so that when i change a value in f2, it does not also change f1. How would i go about doing this in java?


First, have your class implement the Cloneable interface. Without this, calling clone() on your object will throw an exception.

Next, override Object.clone() so it returns your specific type of object. The implementation can simply be:

@Override
public MyObject clone() {
    return (MyObject)super.clone();
}

unless you need something more intricate done. Make sure you call super.clone(), though.

This will call all the way up the hierarchy to Object.clone(), which copies each piece of data in your object to the new one that it constructs. References are copied, not cloned, so if you want a deep copy (clones of objects referenced by your object), you'll need to do some extra work in your overridden clone() function.


Most objects have a method clone() that will return a copy of that object, so in your case

f2 = f1.clone()


You use clone.


Use something like

f2 = f1.clone();

If you have custom properties (or members), you should override clone in your class to make deep copy. You can learn about shallow and deep copy here

http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/


It is said that using the built in clone method has some issues. Therefore it is better to implement another cloning technique.

There is a java library which supports both shallow cloning and deep cloning. It offers deep cloning without the need to implement Serializable.

Here


you could clone or if you can't clone you can write your own function for it.

function (variable){
   clone = JSON.parse(JSON.stringify(variable))
   return clone;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜