我想让测试无法修改,所以我使用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
答案 0 :(得分:5)
方法Collections.unmodifiableSet
接受Set
并返回另一个Set
实现,该实现将所有读访问方法调用委托给基础集,并通过抛出异常来阻止所有写访问方法调用。 / p>
换句话说:返回的Set
不是EnumSet
。使用方法如下:
Set<T.Enum> test = Collections.unmodifiableSet(EnumSet.of(T.Enum.A));
编辑:由于班级EnumSet
的所有方法都是静态的,因此使用EnumSet
代替Set
没有任何优势;所以上面的代码在所有情况下都可以正常工作。