Java unmodifiable set转换为enumset

时间:2014-03-18 14:21:16

标签: java collections set

我想让测试无法修改,所以我使用Collections.unmodifiableSet并按照this answer.

进行投射
EnumSet<T> test = (EnumSet) Collections.unmodifiableSet(EnumSet.of(T.Enum.A));

但我不断得到以下内容。上面有什么问题?

java.lang.ClassCastException: java.util.Collections$UnmodifiableSet cannot be cast to java.util.EnumSet

1 个答案:

答案 0 :(得分:5)

方法Collections.unmodifiableSet接受Set并返回另一个Set实现,该实现将所有读访问方法调用委托给基础集,并通过抛出异常来阻止所有写访问方法调用。 / p>

换句话说:返回的Set不是EnumSet。使用方法如下:

Set<T.Enum> test = Collections.unmodifiableSet(EnumSet.of(T.Enum.A));

编辑:由于班级EnumSet的所有方法都是静态的,因此使用EnumSet代替Set没有任何优势;所以上面的代码在所有情况下都可以正常工作。