Numaralandırma < arasında bir fark var mı? ZipEntry > ve Numaralandırma <ZipEntry>'u uzatır? Eğer öyleyse, fark nedir?Numaralandırma Arasındaki Fark <? ZipEntry> ve numaralandırma <ZipEntry> uzatır?
cevap
Bunlardan birine sahip olduğunuzda yapabilecekleriniz açısından pratik bir fark yoktur, çünkü tip parametresi sadece "çıkış" konumunda kullanılır. Diğer yandan, 'u'dan biri olarak kullanabilmeniz açısından büyük bir fark var.
Bir Enumeration<JarEntry>
aldığınızı varsayalım - bunu, Enumeration<ZipEntry>
argümanlarından biri olarak kabul eden bir yönteme aktaramadınız. Siz , Enumeration<? extends ZipEntry>
alarak bir yönteme geçebilirsiniz.
En belirgin örnek olan List<T>
hem giriş hem de çıkış konumlarında type parametresini kullanan bir türünüz olduğunda daha ilginçtir. Bir parametrede varyasyonlara sahip üç yöntem örneği. Her durumda, listeden bir öğe almaya çalışacağız ve başka bir tane ekleyeceğiz.
// Very strict - only a genuine List<T> will do
public void Foo(List<T> list)
{
T element = list.get(0); // Valid
list.add(element); // Valid
}
// Lax in one way: allows any List that's a List of a type
// derived from T.
public void Foo(List<? extends T> list)
{
T element = list.get(0); // Valid
// Invalid - this could be a list of a different type.
// We don't want to add an Object to a List<String>
list.add(element);
}
// Lax in the other way: allows any List that's a List of a type
// upwards in T's inheritance hierarchy
public void Foo(List<? super T> list)
{
// Invalid - we could be asking a List<Object> for a String.
T element = list.get(0);
// Valid (assuming we get the element from somewhere)
// the list must accept a new element of type T
list.add(element);
}
Daha fazla ayrıntı için okuyun:
Evet, düz sun generics tutorials birinden:
Şekil, üç alt sınıf ile soyut bir sınıftır: Daire, Dikdörtgen, ve Üçgen.
public void draw(List<Shape> shape) { for(Shape s: shape) { s.draw(this); } }
Bu beraberlik() yöntem yalnızca Shape listelerinde çağrılabilir ve bir listede adı verilen olamaz fazlalaştı örneğin Circle, Dikdörtgen ve Üçgeni'nin . yöntemini sahip olmak için aşağıdaki gibi yazılı olmalı, şekil her türlü kabul ediyoruz: Şimdi
public void draw(List<? extends Shape> shape) { // rest of the code is the same }
sadece gittin ve ben C# dünyada üzerinde olsaydı şey hatırlattı . Logic and its application to Collections.Generic and inheritance
bir seçim olan şunlardır:
- Contravariance and Covariance in C# (kod bağlantılar sağlanan dışında
, bu soruya cevap bu konu ile ilgili olarak C# ve Java ile ilgili bazı iyi bağlantılar var C# özgü ve sözdizimi [henüz] yok çünkü teorik olmakla çok iyi genel olarak konuları kapsar.)
- Java generics and the covariance and contravariance of arguments
- Java generics tutorial fr om Sun.
- 1. ConcurrentDictionary numaralandırma ve kilitleme
- 2. LINQ ve sayfa numaralandırma
- 3. Dil ve bölge numaralandırma
- 4. foreach ve numaralandırma
- 5. Haskell numaralandırma
- 6. Jenerik ve Sınıf <? Numaralandırma <?>>, class.getEnumConstants vs EnumSet.allOf (sınıfı)() uzanır
- 7. Varsayılan numaralandırma UWP ThemeResources
- 8. Akka.net içindeki dosyaları numaralandırma
- 9. Python: os.walk() numaralandırma ile
- 10. Harici sürücüleri numaralandırma
- 11. Numaralandırma ile döngü
- 12. es6 sınıf yöntemlerini numaralandırma
- 13. Numaralandırma sayısı nasıl alınır?
- 14. Özniteliklerle UML modelleme numaralandırma
- 15. R içinde `=` ve `<-` arasındaki fark nedir?
- 16. neyin arasındaki fark '! =' Ve '<>' mysql
- 17. UIWebView, Word office belgesi ve sayfa numaralandırma
- 18. Asp.net'de <#eval ve <#bind arasındaki fark nedir?
- 19. <f:viewParam> ve <f:param> arasındaki fark nedir?
- 20. Sınıf <?> ve Sınıf <Object> Arasındaki Fark
- 21. ASP.NET MVC'de <% # ve <% = arasındaki fark nedir?
- 22. <% # ve <% = açılış etiketleri arasındaki fark nedir?
- 23. Raporlar içindeki madde işaretleri ve numaralandırma
- 24. .NET's CodeDom kullanarak numaralandırma oluşturma
- 25. Scala Numaralandırma değerleri sipariş edilmiyor?
- 26. NSMutableArray - Numaralandırma olmadan sorgulama öğeleri?
- 27. Simple Wordpress AJAX sayfa numaralandırma
- 28. RDLC'yi çağırma çağrısı SecurityAction Numaralandırma
- 29. Numaralandırma anahtar sözcük içinde C#
- 30. Lateks: Algoritmaların numaralandırma stilini değiştirme
JarEntry (ZipFile.entries joker kullanıyorsa neden nedeni) gibi bir ZipEntrySubclass? –
Teşekkür Tom - Bu, bu hafta Jon Skeet Benden önce bir cevap aldı ikinci kez benim cevap :) –