final Set<Expression> exps = meng.getExps();
Iterator<Expression> iterator = exps.iterator();
final Expression displayedExp = exps.iterator().next();
exps.remove(displayedExp);
此代码将返回以下运行时异常跟踪:
null
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1021)
meng.getExps()的Set实现是一个LinkedHashSet。
答案 0 :(得分:7)
抱歉,你运气不好:Set被Collections.unmodifiableCollection包裹着,这正是这样做的:使收藏品无法修改。您唯一能做的就是将内容复制到另一个Set中并使用它。
答案 1 :(得分:4)
你的getter明确地返回一个UnmodifiableCollection
,它是Set
周围的排序包装,阻止修改。
换句话说,API告诉你“这是我的收藏,请看但不要碰!”
如果要修改它,则应将其复制到新的Set中。 HashSet
的复制构造函数非常适用于此目的。
答案 2 :(得分:0)
您将您的 Set 声明为“final”,这意味着它不能被修改。你得到的错误是正常的。
如果要更改 Set 的内容,请删除“final”。