假设我有以下内容 Set
Set<String> fruits = new HashSet<String>();
fruits.add("Apple")
fruits.add("Grapes")
fruits.add("Orange")
如果我想创建一个防御性副本,以便在修改原始列表时,副本不会反映它,我可以这样做:
Set<String> unmodifiableFruits = Collections.unmodifiableSet(new HashSet(fruits))
所以如果我这样做:
fruits.add("Pineapple")
println(unmodifiableFruits)
unmodifiableFruits 不会有菠萝。
或者我可以这样:
Set<String> unmodifiableFruits = Collections.unmodifiableCollection(fruits)
结果是一样的,unmodifiableFruits没有菠萝。
问题:
假设如果我fruits作为参数传递给一个类,首选方法是Collections.unmodifiableCollection()?
原因是,我读过new在构造函数中声明是一种不好的做法,如果我要使用Collections.unmodifiableSet(),我需要声明一个new HashSet<String>(fruits).
为什么我不能这样做?
Collections.unmodifiableSet(fruits)
并让它返回一个不可修改的集合。
相反,我必须这样做:
Collections.unmodifiableSet(new HashSet<String>(fruits))
是不是因为 Set 是一个接口并且它不知道要返回哪个实现?
潇湘沐
相关分类