Neden Java'In AbstractList'In removeRange() yöntemi korumalı?
Herkes herhangi bir fikir var mınedenremoveRange metodu AbstractList (ArrayList) protected
? İyi tanımlanmış ve oldukça faydalı bir çalışma gibi görünüyor, ama yine de, bunu yapmak için, Liste uygulaması alt etmek zorunda kaldık.
Gizli bir gerekçesi var mı? Bana anlaşılmaz görünüyor.
CEVAP
Evet, çünkü bu kod dışında bir dizi nasıl kaldırmak değil. Bunun yerine, bunu yapmak için:
list.subList(start, end).clear();
Bu aslında perde arkasında removeRange
der.
OP removeRange
List
ortak API parçası değil neden diye soruyor. Bu nedenle Etkili Java 2 ed Madde 40 olarak açıklanmıştır, ve buraya alıntı yapıyorum:
Çok uzun parametre listeleri kısaltmak için üç teknikler vardır. Bu yöntem, her parametre yalnızca bir kısmını gerektirir birden fazla yöntem, içine kırmak için. Eğer dikkatsizce yapılırsa, bu çok fazla yöntem yol açabilir, ama aynı zamanda yardımcı olabilirazaltmakbu yöntem artan diklik sayısı. Örneğin,
java.util.List
arabirim düşünün. Yöntem üç parametre gerektirir, hem de listesini bir öğe, ilk veya son dizin bulmak için sağlamaz. Bunun yerine iki parametre alır ve verirsubList
yöntem sağlargörünümbir alt liste. Bu yöntem, her biri tek bir parametre vardırindexOf
lastIndexOf
yöntemler, istenen işlevi verimi ile kombine edilebilir. Ayrıca,subList
yöntemi ile birlikte kullanılabilirherhangi biralt listelere keyfi hesaplamaları gerçekleştirmek içinList
Bir örnek üzerinde çalışır bu yöntem. Sonuç API çok yüksek güç-ağırlık oranına sahiptir.
Bu durumda ileri sürülebilir removeRange
yok olan çok sayıda parametre ve bu nedenle muhtemelen bir aday için bu tedavi, ama bu belirli bir şekilde çağırmak removeRange
subList
, orada hiçbir neden için bu kadar karmakarışık List
arayüzü ile bir gereksiz yöntemi.
Neden clone() java yöntemi korumalı.la...
Java statik korumalı kullanmalıyız ned...
Neden java.ıo.Yok't bir yakın dos...
Neden char[] şifreler için Dize Java t...
'kamu, varsayılan olarak korumalı...