如何在J2ME / BlackBerry中深度复制矢量?

时间:2010-03-22 17:49:45

标签: memory collections blackberry java-me vector

如何在J2ME / BlackBerry中深度复制矢量?

3 个答案:

答案 0 :(得分:7)

不幸的是,没有可靠的方法在Vector对象上进行深层复制。

快速回顾我认为“深层复制”的内容:深层复制是一个副本,其中不仅复制了集合的内容(在本例中为矢量),而且Vector中包含的对象是独立复制。换句话说:如果向量V包含A,并且复制(V')为V,则V'中A(A')的副本不受A的任何更改的影响,反之亦然。

通常,这将通过“克隆”对象来实现。不幸的是,如果你无法控制Vector中的对象,你就没有合理的方法来克隆它们,特别是因为JavaME没有Cloneable接口(据我所知)。

当然,如果您确实控制了对象,您可以创建自己的Cloneable接口,该接口指定clone()方法,该方法返回对象的完全独立的副本。然后,您必须确保特殊克隆Vector仅接受实现该接口的对象。从那里开始,你可以很容易地(代码方式)创建一个可以克隆自己的Vector。

答案 1 :(得分:4)

由于您将此标记为BlackBerry而不仅仅是J2ME,因此应该提到有一个CloneableVector类是BlackBerry API的一部分。如果你想坚持使用严格的J2ME,这将毫无用处。但是,如果您只是针对BlackBerry,那么它就能满足您的需求。

net.rim.device.api.util.CloneableVector documentation

答案 2 :(得分:2)

您需要使用循环复制Vector的内容。

Enumeration e = projects.elements();
while (e.hasMoreElements()) {
    this.projects.addElement((Project) e.nextElement());
}

需要更多信息,请参阅The Java Forum第2页回复18,答案就在那里。