SORU
18 ŞUBAT 2010, PERŞEMBE


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
18 ŞUBAT 2010, PERŞEMBE


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 verir subList yöntem sağlargörünümbir alt liste. Bu yöntem, her biri tek bir parametre vardır indexOf 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çin List 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006
  • SignatureSeries

    SignatureSer

    24 Aralık 2006