我没有找到这个特定问题的直接答案,所以......假设类:
class MyClass {
private final Set<String> tags;
MyClass(Set<String> initialTags) {
this.tags = ???(initialtags);
}
}
我只想要一个副本而不关心集合的确切实现,开销最小,所以基本上是任何内部状态 initialTags 的直接副本。我不能使用clone
,因为 Set 是接口。这是可能的,还是我必须使用类似的东西new HashSet<String>(tags);
,需要对类型做出决定?
假设:设置项目类型被限制为不可变。我可以相信调用者不会传递一个损坏的initialTags
Set 实现,并且我可以相信它有足够好的性能用于此类中的任何内部使用。
我正在考虑尝试反射和克隆(),但这似乎有点脏......