You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodenameOne中克隆Vector获取独立副本而非引用

Codename One中获取Vector独立副本的解决方案

问题根因

Codename One对java.util.Vector的实现做了裁剪优化,和标准JDK实现存在两处关键差异:

  • clone()方法被修饰为protected,无法在类外直接调用
  • 带集合参数的构造方法Vector(Vector c)不会复制底层数据,而是直接复用原Vector的内部存储引用,因此新老集合完全共享数据,修改会双向同步

适用不同场景的解决方案

场景1:仅需要集合结构独立

适用于元素为不可变类型(如String、基础类型包装类),或允许元素值修改同步的场景,仅需保证对原Vector的增删操作不影响新Vector:

Vector originalVector = 你的原Vector实例;
Vector independentVector = new Vector();
for (Object element : originalVector) {
    independentVector.add(element);
}

场景2:需要完全独立的深拷贝

适用于元素为可变自定义类型,需要完全隔离新老集合的修改影响的场景,需为元素类自行实现拷贝逻辑:

// 示例:元素为自定义User类,已实现deepCopy()方法完成属性深拷贝
Vector<User> originalVector = 你的原Vector实例;
Vector<User> deepCopiedVector = new Vector();
for (User user : originalVector) {
    User copiedUser = user.deepCopy();
    deepCopiedVector.add(copiedUser);
}

内容的提问来源于stack exchange,提问作者Mark Bolduc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:21:01