有谁知道,为什么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
的实现。