它的抱怨,你存储阵列是由主叫方持有相同的数组。也就是说,如果调用者随后修改了此数组,则存储在对象中的数组(以及对象本身)将发生变化。
解决方案是在传递对象时在对象内进行复制。这称为 防御性复制 。收集的后续修改不会影响存储在所述对象内的阵列。
在返回集合时(例如在相应的
getMyArray()调用中)通常也要这样做。否则,接收者可能会执行修改并影响存储的实例。
注意,这显然适用于所有可变集合(实际上是所有可变对象),而不仅仅是数组。还要注意,这会对性能产生影响,需要与其他问题一起进行评估。

它的抱怨,你存储阵列是由主叫方持有相同的数组。也就是说,如果调用者随后修改了此数组,则存储在对象中的数组(以及对象本身)将发生变化。
解决方案是在传递对象时在对象内进行复制。这称为 防御性复制 。收集的后续修改不会影响存储在所述对象内的阵列。
在返回集合时(例如在相应的
getMyArray()调用中)通常也要这样做。否则,接收者可能会执行修改并影响存储的实例。
注意,这显然适用于所有可变集合(实际上是所有可变对象),而不仅仅是数组。还要注意,这会对性能产生影响,需要与其他问题一起进行评估。