有谁知道,为什么AbstractList(以及ArrayList)中的removeRange方法是protected?它看起来像是一个定义明确且有用的操作,但是仍然要使用它,我们不得不对List实现进行子类化。

有一些隐藏的理由吗?对我来说似乎莫名其妙。

最佳答案

是的,因为这不是您从外部代码中删除范围的方式。相反,请执行以下操作:

list.subList(start, end).clear();

这实际上是在幕后调用removeRange。†

OP询问为什么removeRange不属于List公共(public)API的一部分。原因在《有效Java第二版》的第40条中进行了描述,在此引用:



有人可以说removeRange没有那么多参数,因此可能不适合使用此方法,但是鉴于有一种方法可以通过removeRange调用subList,因此没有理由使用冗余方法来使List接口(interface)杂乱无章。

AbstractList.removeRange 文档说:



另请参阅OpenJDK的 AbstractList.clear SubList.removeRange 的实现。

07-24 19:17