【发布时间】:2016-07-20 03:02:25
【问题描述】:
我有一个如下所示的类。
class ClassName{
private Set<String> set;
public ClassName(Set<String> set){
this.set=set;
}
public Set<String> getSet(){
return set;
}
}
我想通过 getter 返回集合的克隆,而不是对集合本身的引用。因为 set 是一个接口,所以它没有 clone 方法。
class User{
public static void main(String[] args){
HashSet<String> hs=new HashSet<String>();
hs.add("str1");
hs.add("str2");
ClassName cn=new ClassName(hs);
HashSet<String> newHS=cn.getSet();
newHS.add("str3");
}
}
如果我返回对集合本身的引用,那么获取集合的方法可能会从集合中添加或删除,这不像上面的用户类那样有利。任何人都可以建议一种克隆集合的方法吗?
使用 Set 而不是 HashSet 或 TreeSet 的原因是因为这将使 ClassName 可重用,因为当我决定将来使用不同类型的 Set 时,我不必更改 ClassName。
【问题讨论】:
-
.clone()在 Java 中是坏的,一直都是,你永远都不想使用.clone()。看来您真的只是想要一个支持集的ImmutableSet视图。