mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2026-05-29 18:57:11 +08:00
fix(Tuple): 修复 Tuple 不可变性破坏问题,增加 defensive copy
Tuple 设计为不可变类型(注释:不可变数组类型),但原实现存在两处不可变性破坏: 1. 构造函数直接赋值 `this.members = members`,外部修改传入数组会影响 Tuple 内部状态 2. `getMembers()` 直接返回内部数组引用,外部可通过引用直接修改 Tuple 内容 修复:在构造函数中对传入数组做 defensive copy,getMembers() 返回副本
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user