【发布时间】:2017-12-05 18:09:24
【问题描述】:
在运行我的 MVC 模型应用程序时,会创建一个 ApplicationModel 的 Singleton 实例。
在我的控制器类中运行 main 方法时,使用 setShops() 将 List<Shop> 分配给 shops。如果shopsDefault = null,setShops() 也将继续将相同的List<Shop> 分配给shopsDefault。
到目前为止,一切都很好。
但是,当我调用 sortShopsByName() - 正如您在下面看到的那样使用 setShops() - shops 和 shopsDefault 都已排序!为什么它不按预期对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);
}
}
【问题讨论】:
-
您似乎只将两个变量都设置为
List<Shop>的单个实例。当该实例被排序时,它被排序。任何指向它的引用都会反映这一点。 -
"如果
shopsDefault = null,setShops()也将继续将相同的List<Shop>分配给shopsDefault。" 相同的列表。