Soru Java jenerik mark' tür parametresi ne demek? | Netgez.com
SORU
9 HAZİRAN 2010, ÇARŞAMBA


Soru Java jenerik mark' tür parametresi ne demek?

Bu küçük kodlar Stanford Parser eşlik eden örnekleri de alınır. Yaklaşık 4 yıldır Java geliştirmeye çalışıyorum, ama hiçbir zaman bu kod stil göstermek için ne gerekiyor çok güçlü bir anlama sahip.

List<? extends HasWord> wordList = toke.tokenize();

Kod ayrıntıları hakkında endişeli değilim. Tam anlamadım ne genel bir ifade iletmek için İngilizce gerekiyor.

Birisi bana bunu açıklayabilir mi?

CEVAP
9 HAZİRAN 2010, ÇARŞAMBA


? extends HasWord

anlamı, "Bir sınıf uzanan HasWord./arabirim" , HasWord kendisine veya çocukların başka bir deyişle... instanceof HasWord artı null ki, o, temelde bir şey.

Daha teknik terimler, ? extends HasWord içinde sınırlı bir joker, sayfa 134 itibaren Effective Java 2nd Edition, Madde 28 kaplı. Bu Jenerik available online as a PDF ilgili bölümün bir parçası.

Güncelleme: PDF link Oracle bir süre önce kaldırıldı bu yana güncellendi. Şimdi Elektronik Mühendisliği ve Bilgisayar Bilimi London School of kopya Queen Mary Üniversitesi ev sahipliğinde işaret eder.

Güncelleme 2: biraz daha detaya joker kullanmak istersin neden Sağlar.

Eğer List<HasWord>, içinde geçeceğini olan bir yöntem bildirirseniz o zaman da geçirebilirsiniz tek şey List<HasWord>.

Eğer imza List<? extends HasWord> olduğunu söyledi, ancak daha sonra List<ChildOfHasWord> yerine geçmek.

List<? extends HasWord> List<? super HasWord> arasında ince bir fark olduğunu unutmayın. Joshua Bloch dediği gibi: PECS = yapımcı-genişletir, tüketici-süper.

Bunun anlamı, eğer yöntemi dışarı veri (yönteminizi elemanları üreten kullanmaktır toplama yani) çeken bir koleksiyon geçirmeden, extends kullanmalısınız. Eğer yöntem için veri ekler bir koleksiyon (senin yöntemini oluşturur tüketen öğeleri toplama yani) yolunuz düşerse, super kullanmalısınız.

Bu kafa karıştırıcı gelebilir. Ancak, Listgörebilirsiniz's sort komut Koleksiyonları.iki-arg sürümü için sadece bir kısayol (sıralama). Bir yerine Comparator<T> aslında Comparator<? super T> alır. Bu durumda, Karşılaştırma Listesi yeniden düzenlemek için List unsurları alıcıdır.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • Caramthros

    Caramthros

    10 AÄžUSTOS 2007
  • paulandstorm

    paulandstorm

    4 EYLÃœL 2006