gpt4 book ai didi

Java坚持改变这两个变量

转载 作者:行者123 更新时间:2023-11-29 08:31:36 25 4
gpt4 key购买 nike

运行我的 MVC 模型应用程序时,ApplicationModel 的单例实例已创建。

在我的 Controller 类中运行 main 方法时,一个 List<Shop>分配给 shops使用 setShops() .如果shopsDefault = null , setShops()也将继续分配相同的 List<Shop>shopsDefault .

到目前为止,还不错。

但是,当我调用 sortShopsByName() - 正如您在下面看到的那样使用 setShops() - 两者 shopsshopsDefault变得有序!为什么它不只是排序 shops如预期的那样?

我的 ApplicationModel类...

import java.util.*;

public class ApplicationModel {

//static variables
private static ApplicationModel instance = null;

//instance variables
private List<Shop> shops;
private List<Shop> shopsDefault;

//constructors
private ApplicationModel() {}

//getInstance method
public static ApplicationModel getInstance() {
if (instance == null) {
instance = new ApplicationModel();
}

return instance;
}

//getters and setters
public List<Shop> getShops() {
return shops;
}

public void setShops(List<Shop> shops) {
this.shops = shops;
if (this.shopsDefault == null) {
this.shopsDefault = shops;
}
}

public List<Shop> getShopsDefault() {
return this.shopsDefault;
}


//Shop methods
public void sortShopsByName() {
List<Shop> shops = this.getShops();
Collections.sort(shops);
this.setShops(shops);
}

public void returnShopsToDefaultOrder() {

List<Shop> shopsDefault = this.getShopsDefault();
setShops(shopsDefault);
}
}

最佳答案

一旦您将 shops 分配给 shposDefault,它们都引用同一个实例。因此,通过任一实例对实例所做的更改将通过两个引用可见。

如果这不是预期的行为,您可以在设置 null 时复制 shops 列表。例如:

public void setShops(List<Shop> shops) {
this.shops = shops;
if (this.shopsDefault == null) {
this.shopsDefault = new ArrayList<>(shops);
}
}

关于Java坚持改变这两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660076/

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