fix(Tuple): 修复 Tuple 不可变性破坏问题,增加 defensive copy

Tuple 设计为不可变类型(注释:不可变数组类型),但原实现存在两处不可变性破坏:
1. 构造函数直接赋值 `this.members = members`,外部修改传入数组会影响 Tuple 内部状态
2. `getMembers()` 直接返回内部数组引用,外部可通过引用直接修改 Tuple 内容

修复:在构造函数中对传入数组做 defensive copy,getMembers() 返回副本
This commit is contained in:
Busyliu
2026-03-02 05:03:06 +00:00
committed by Gitee
parent b7e9341e32
commit f8184b0087

View File

@@ -33,7 +33,8 @@ public class Tuple extends CloneSupport<Tuple> implements Iterable<Object>, Seri
* @param members 成员数组
*/
public Tuple(Object... members) {
this.members = members;
// defensive copy保证 Tuple 的不可变性,防止外部修改传入数组影响内部状态
this.members = members.clone();
}
/**
@@ -51,10 +52,11 @@ public class Tuple extends CloneSupport<Tuple> implements Iterable<Object>, Seri
/**
* 获得所有元素
*
* @return 获得所有元素
* @return 获得所有元素的副本
*/
public Object[] getMembers() {
return this.members;
// 返回副本而非内部数组引用,防止外部修改破坏 Tuple 的不可变性
return this.members.clone();
}
/**