除了ArrayList
之外,有哪些Collections.unmodifiableList()
只读方式有哪些?
答案 0 :(得分:1)
扩展数组列表类并重新实现更改列表的方法,以便不更改列表。
如果您提前知道价值,也可以将其作为最终结果。
你为什么要重新发明轮子?
答案 1 :(得分:1)
没有(实际)方法只能进行ArrayList
读取。使用Collections.unmodifiableList
进行换行会创建一个只读的新对象。原来的ArrayList
仍然是可变的。
如果你想构建一个不可变的List
,请使用guava' s ImmutableList
。
答案 2 :(得分:1)
最直接的方法是创建一个包装类,实现一个List但是明确地为修改列表的所有方法返回UnsupportedOperationException。你可以扩展AbstractList,以减少你的代码。
你将获得Collections.unmodifiableList将免费提供给你的克隆... Doc说:返回指定列表的不可修改的视图。此方法允许模块为用户提供对内部列表的“只读”访问。对返回列表的查询操作“读取”到指定列表,并尝试修改返回的列表,无论是直接还是通过其迭代器,都会导致UnsupportedOperationException ,但是测试较少,因此具有较高的静默错误风险
我的建议是:如果它存在,如果它符合您的要求,请使用它,不要重新发明它。