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

  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009