我想构建一个数据模型,该数据模型传达一个迭代器和一个大小,基本上是一种迭代结果集元素的只读方式。

我认为扩展ImmutableCollection并实现size()和iterator()是最好的方法,因为这种类型可以充分传达我的意图。

不幸的是,ImmutableCollection有一个程序包专用的isPartialView。

我的问题:为什么isPartialView包是私有的,应该保持私有,如果是,那么为只读集合建模的最佳方法是什么?是否应该仅使用size()和iterator()方法(SizedIterable)创建自定义类型?这个用例还有其他建议吗?

最佳答案

Collection接口中的许多操作被认为是可选的。您可以在上面编写自己的实现,然后为实现不支持的任何操作抛出UnsupportedOperationException。这将是避免扩展ImmutableCollection的一种方法。
子类化ImmutableCollection可能不是一个选择,因为其文档指出以下内容:

不可变的集合。不允许使用null元素。
注意:尽管此类不是最终的,但由于它没有公共或受保护的构造函数,因此不能在此包外部进行子类化。因此,保证了这种类型的实例是不可变的。

07-24 09:24