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
? 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, List
gö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.
Ä°ki soru iÅŸareti birlikte C ne demek#?...
Jenerik Java: PECS Nedir?...
Liste<Köpek> Listenin alt<Hay...
Java Birden Fazla Sınıflar İle Joker K...
'in elimden nedeni't ne oluÅŸ...