gpt4 book ai didi

java-- 为什么要复制类免疫性的参数?

转载 作者:行者123 更新时间:2023-11-29 04:18:35 24 4
gpt4 key购买 nike

我目前看到这个构造函数:

public ImmutableClass( final long id, final String[] arrayOfStrings,
final Collection< String > collectionOfString) {

this.id = id;
this.arrayOfStrings = Arrays.copyOf( arrayOfStrings, arrayOfStrings.length );
this.collectionOfString = new ArrayList<>( collectionOfString );
}

我以前从未见过这样的东西。有人认为这是为了类的“不变性”,它确保状态不能从外部修改。

那么,这有意义吗?或者这是什么?

此外,我想知道为什么这段代码中的参数被标记为final?

最佳答案

So, does this make sense or what is this?

这将对字符串数组参数进行深度复制。

arrayOfStrings = Arrays.copyOf( arrayOfStrings, arrayOfStrings.length );

这会将输入数组复制到内部变量,从而有效地防止通过修改提供的数组来修改 ImmutableClass.arrayOfStrings 字段。

如果你简单地这样分配它:

public ImmutableClass( final long id, final String[] input,
final Collection< String > collectionOfString) {

this.id = id;
this.arrayOfStrings = input;
...
}

然后,当您修改 input 时:input[0] = "new string",内部 arrayOfStrings 也被修改,这会中断不可变 特性

同样的逻辑应用于collectionOfString

Furthermore, I wanted to know why the arguments in this code are marked as final?

它是防止将提供的参数重新分配给其他值的守卫。

关于java-- 为什么要复制类免疫性的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50666825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com