SORU
13 Mayıs 2012, Pazar


Java isteğe bağlı Yöntemleri Arayüzü

Java içinde bir arabirim uygulamak eğer benim anlayış, yöntem arayüzü belirtilen alt sınıfların dedi arabirimi uygulama tarafından kullanılacak.

Toplama arayüzü gibi bazı arayüzler opsiyonel olarak yorumladı hangi yöntem olduğunu fark ettim, ama tam olarak bu ne anlama geliyor? Tüm yöntemleri arabirimi belirtilen gerekli olacağını düşündüm olarak bana atılan bit?

CEVAP
13 Mayıs 2012, Pazar


Cevaplar içinde korkunç bir karışıklık var burada.

Java dili bir arayüz her yöntemi arabirim her uygulama tarafından uygulanan gerektirir. Dönem.Bu kuralın istisnaları vardır."Koleksiyon bir istisnası vardır" gerçekten burada ne çok bulanık bir anlayış gösteriyor. demek

Önemli bir arabirime uygun iki seviyeli bir tür olduğunu fark etmek

  1. Java dili kontrol edebilirsiniz. Bu çok aşağı kaynar: yokbazıbu yöntemlerin her biri için uygulama?

  2. Aslında kontratını yerine getirmek. Uygulama arayüzünde belgelere diyor ne yapıyor olmalıdır?

    İyi yazılmış arabirimleri Dokümantasyon uygulamaları beklenen tam olarak açıklayan içerir. Derleyici sizin için bu kontrol edebilirsiniz. Belgeleri okumak, ve onların dediklerini yapmak gerekir. Eğer sözleşme ne diyorsa onu yap eğer doğru değilse o zaman arabirimi uygulaması kadarıyladerleyiciendişeli, ama hatalı/geçersiz bir uygulama olacaktır.

Koleksiyon API tasarlarken Joshua Bloch koleksiyonları çok farklı çeşitleri ayırt etmek için ince taneli arabirimleri (örn: okunabilir, yazılabilir, random-access, vb.) yerine karar verdi sadece arayüzleri çok kaba ayarlayın, öncelikle olurdu *0, *, ***1 2* Map ve sonra da belgeyi belirli işlemleri"". isteğe bağlı olarak Bu ince taneli arabirimleri sonuçlanan Gazi patlamayı önlemek için. Java Collections API Design FAQ:

Kanlı ayrıntılı olarak sorunu göstermek için, eklemek istediğiniz varsayalım Hiyerarşiye modifiability kavramı. Dört yeni ihtiyacın var arayüz, ModifiableSet, ModifiableList, ModifiableCollection ve ModifiableMap. Daha önce olduğu gibi şimdi bir tanımla basit bir hiyerarşi neydi heterarchy. Ayrıca, kullanmak için yeni bir Yineleyici arabirimi gerekir değiştirilemeyen Koleksiyonları, bu kaldırma işlemi içermiyor. Uzak UnsupportedOperationException ile yapabilir misin şimdi? Ne yazık ki değil.

Dizileri düşünün. Onlar Listenin en işlemleri uygulamak, ama değil kaldırın ve ekleyin. "Sabit boyutlu" Listeler. Eğer yakalamak istiyorsanız hiyerarşisinde bu kavramı, iki yeni arayüzler eklemek zorunda: VariableSizeList ve VariableSizeMap. Eklemek zorunda değilsin Olurdu ve VariableSizeSet VariableSizeCollection, ModifiableCollection ve ModifiableSet aynı, ama olabilir yine de tutarlılık aşkına eklemek için seçin. Ayrıca, yeni bir ihtiyacınız Listİterator çeşitli destek yok Ekle ve kaldır değiştirilemeyen Listesi ile birlikte gitmek için işlemleri. Şimdi on geldik ya on iki arayüzleri, artı yeni Yineleyici iki arabirimi, bizim yerine orijinal dört. İşimiz bitti mi? Hayır.

Günlükleri (dergi için hata günlükleri gibi, denetim günlükleri ve düşünün geri kazanılabilir veri nesneleri). Yalnızca ekleme dizileri,doğallar Liste operasyonları tüm desteği hariç kaldırın ve ayarlayın (değiştirin). Yeni çekirdek bir arayüz ve yeni bir yineleyici gerektirir.

Ve değiştirilemeyen olanlar karşısında değişmez Koleksiyonları, ne dersin? (yani, istemci tarafından değiştirildi Koleksiyonları VE asla başka bir nedenle) için değiştirin. Birçok bu en iyi olduğunu iddia birden çok iş parçacığı sağlar çünkü tüm önemli ayrım, bir koleksiyonu aynı anda senkronizasyon için gerek kalmadan erişim. Türü hiyerarşisi için bu desteği ekleyerek dört veya daha fazla gerektirir arayüzleri.

Şimdi yirmi kadar arabirimleri ve beş kullanımına bağlı olduğumuzu, ve neredeyse hala koleksiyonlar uygulamada ortaya çıkan bu tür bazı o temiz arabirimleri herhangi birine uymaz. Örneğin, toplama-Harita görünümü doğal tarafından döndürülen silin-sadece koleksiyon. Ayrıca, belirli öğeleri geri koleksiyonları var biz hala uzak çalışma yapmadım bu yüzden onların değeri olarak, özel durumlar.

Tüm dedi ve bitmiş, bir ses mühendisliği olduğunu düşündük çok küçük bir set vererek bütün mesele kaçınmak için uzlaşma çalışma zamanı bir istisna olabilir çekirdek arayüzleri.

Ne zaman yöntemleri Koleksiyonları API belgelenmiştir olarak "isteğe bağlı işlemler", o demek değil sadece Bırak yöntemi uygulaması dışında uygulama, ne anlama geliyor kullanabileceğiniz boş bir yöntem vücut için bir şey, çok ihtiyacım var dönüş sonucu). Bunun yerine, geçerli bir uygulama tercihi (hala sözleşme için uygundur) UnsupportedOperationException atmak demektir.

UnsupportedOperationException RuntimeException çünkü herhangi bir yöntem uygulamadan, derleyici ile ilgili olarak atabilir unutmayın. Örneğin, Collection.size() uygulaması onu atmak olabilir. Ancak, böyle bir uygulama Collection.size() belgelerine buna izin derdi yok gibi, sözleşmeyi ihlal eder.

Kenara: yaklaşım biraz tartışmalı API Java Koleksiyonları tarafından kullanılan (ilk, ancak piyasaya sürüldüğünde muhtemelen daha az şimdi). Mükemmel bir dünyada, arabirimlerideğilisteğe bağlı operasyonlar ve ince taneli arayüzler kullanılacaktır yerine. Sorun şu ki Java destekler "doğru yol" koleksiyonlar halinde son derece kullanışsız hale biter. şeyleri yapmaya neden olan yapısal türleri veya kavşak türleri ne anlaşıldığı,

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • pucksz

    pucksz

    24 Mart 2006