如何在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
相关产品推荐
相关产品推荐

