gpt4 book ai didi

java - 为什么 Java Vector 中的 removeRange(int fromIndex, int toIndex) 受到保护?

转载 作者:行者123 更新时间:2023-12-04 00:52:53 24 4
gpt4 key购买 nike

谁能解释一下为什么 Java Vector 中的 removeRange(int fromIndex, int toIndex) 受到保护?

语法 - protected synchronized void removeRange(int fromIndex, int toIndex)

我研究了一些博客并做了一些代码来理解,但这里的事情并不是很清楚。我查看了 Vector.java 内部,并试图建立一些理解。但我的总体看法是 removeRange(int fromIndex, int toIndex) 最终会被删除。

我觉得 sublist(int fromIndex, int toIndex).clear() 能够完成同样的工作。从实现和可用性的角度来看更合适。

如果您有更好的想法,请帮助理解。

最佳答案

它在那里是因为它是从 AbstractList.removeRange 继承而来的.在此抽象基类中公开它的意图被记录为使子类能够提高 clear() 的性能:

This method is called by the clear operation on this list and its subLists. Overriding this method to take advantage of the internals of the list implementation can substantially improve the performance of the clear operation on this list and its subLists.

此方法极不可能被删除,因为这将是一个主要的兼容性问题。

但是你是对的,作为这个类的用户你应该坚持使用公共(public)接口(interface), protected 方法主要用于实现子类。


那么,为什么方法没有公开呢?

List.subList 的 JavaDocs|告诉我们

This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:

 list.subList(from, to).clear();

因此,不在公共(public)界面中包含范围操作是一种深思熟虑的设计选择。在任何 List 实现中,这些操作都可以通过调用子 ListView 上的操作来执行。

关于java - 为什么 Java Vector 中的 removeRange(int fromIndex, int toIndex) 受到保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65090628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com