Pourquoi Java est AbstractList de removeRange() la méthode protégée?
Quelqu'un a une idée, pourquoi méthode removeRange dans AbstractList (et aussi dans ArrayList) est protected
? Il ressemble assez bien définis et utiles à l'exploitation, mais encore, pour l'utiliser, nous sommes obligés de la sous-classe la Liste de mise en œuvre.
Est-il caché justification? Semble tout à fait inexplicable pour moi.
InformationsquelleAutor Joonas Pulakka | 2010-02-18
Vous devez vous connecter pour publier un commentaire.
Oui, parce que ce n'est pas la façon de supprimer une plage de l'extérieur de code. Au lieu de cela, faire cela:
Ce fait les appels
removeRange
derrière les coulisses.†L'OP demande pourquoi
removeRange
ne fait pas partie de laList
API publique. La raison en est décrit dans l'Article 40 de la Efficace Java 2nd ed, et je le cite ici:On peut dire que
removeRange
n'a pas que de nombreux paramètres et est donc sans doute pas un candidat pour ce traitement, mais étant donné qu'il y a un moyen d'invoquerremoveRange
par le biais de lasubList
, il n'y a pas de raison pour éviter d'encombrer laList
interface avec un redondante méthode.† La
AbstractList.removeRange
documentation dit:Aussi, voir OpenJDK la mise en œuvre de
AbstractList.clair
etsous-liste.removeRange
.ArrayList
.AbstractList.clear
etSubList.removeRange
. 🙂removeRange
appelsarraycopy
inutilement lorsque laArrayList
version est utilisé sur une gamme couvrant jusqu'à la fin de la liste? hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/e2117e30fb39/src/share/... lanumMoved
est 0, de sorte que l'ensemble de la arraycopy code ont été mis dans un seulif
(comme le fait dansremove
); la différence est que arraycopy est un appel des indigènes, encourir des frais généraux, b) arraycopy n' toujours vérifiez les paramètres de l'exactitude stackoverflow.com/questions/12594046/...ArrayList.removeRange
, oui, puisque lenumMoved > 0
case est déjà dansArrayList.remove
, elle doit également êtreremoveRange
pour des raisons de cohérence.