java中克隆对象_如何在java中克隆对象

我想创建一个具有相同父类的对象的列表/数组,然后我将它用于参考.但我不知道如何克隆这些对象来制作一个新对象.

这是一个例子

BigFoo a;

SmallFoo b;

ChickenFoo c;

List foos;

foos.add(a);

foos.add(b);

foos.add(c);

Foo foo = foos.get(1).clone();

但在Java中我发现默认函数中没有克隆函数.我想知道这是如何实现的?

解决方法:

一般建议:使用复制构造函数.事实上,只有一个类本身知道如何创建自己的克隆.没有类可以克隆另一个类的实例.这个想法是这样的:

public class Foo {

public List bars = new ArrayList();

private String secret;

// Copy constructor

public Foo(Foo that) {

// new List

this.bars = new ArrayList();

// add a clone of each bar (as an example, if you need "deep cloning")

for (Bar bar:that.bars) {

this.bars.add(new Bar(bar));

}

// clone the secret value

this.secret = new String(that.secret);

}

// ...

}

因此,如果我们想要克隆foo,我们只需基于foo创建一个新的:

Foo clonedFoo = new Foo(foo);

这是克隆实例的推荐方法.

复制构造函数适用于继承.考虑一个子类

public ChildFoo extends Foo {

private int key;

public ChildFoo(ChildFoo that) {

super(that);

this.key = that.key;

}

}

Foo有一个拷贝构造函数,而ChildFoo只是从它自己的拷贝构造函数中调用它.

你的例子是可能的,但不可取.会发生什么:

Foo a = new Foo();

ChildFoo b = new ChildFoo(a);

这需要ChildFoo上的构造函数,如:

public ChildFoo(Foo that) {

// call the copy constructor of Foo -> no problem

super(that);

// but how to initialize this.key? A Foo instance has no key value!

// Maybe use a default value?

this.key = 0;

}

技术上不是挑战,但b不是a的克隆,因为对象不具有相同的类型.所以这(你的例子)不是克隆.

标签:java

来源: https://codeday.me/bug/20190721/1496621.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值