2015-12-23 13 views
6

Şu anda Java Generics okuyorum ve Wildcards söz konusu olduğunda biraz sıkışmış durumdayım.Java Generics - Kendinden bir alt sınıf mı dersiniz?

Ben Koleksiyonları sınıftan bu yöntemi verildi

: tür parametresi sahip olduğundan

List<Object> objs = new ArrayList<Object>(); 
List<Integer> ints = new ArrayList<Integer>(); 
Collections.copy(objs, ints); 

: Ben o zaman böyle yöntemi çağırmak mümkün olduğunu söylendi

public void <T> copy(List<? super T> dest, List<? extends T> src) { 
    for(int i = 0; i < src.size(); i++) { 
     dest.set(i, src.get(i)); 
    } 
} 

derleyicinin ayrıldığını belirleyen kitap, derleyicinin tip parametresini Tamsayı olarak seçtiğini söylüyor.

Fakat bu nasıl olabilir? o tamsayı olarak kabul olsaydı

, bu yöntem bildiriminde anlamına gelir -
List<? extends T>List<Integer extends Integer> da uyarlanabilir.

Bu bir hata mı, yoksa Jeneriklerle ilgili farklı kurallar var mı? Etrafa baktım ve sonuçların çoğunluğu, bir sınıfın kendi alt sınıfı olamayacağını söylüyor.

+0

Nizet'in cevabı elbette doğrudur ve sadece açıkladığı noktayı kaçırıyor olsaydınız, her şey yolunda. Ancak, jenerikler çok hızlı bir şekilde kafa karıştırıcı olabilirler ve eğer bu özel durum hakkında daha kapsamlı bir açıklamaya ihtiyaç duyduğunuzu düşünüyorsanız, bir tane vermeyi deneyebilirim. – user1803551

cevap

8

Hayır, bu bir hata değil.

? extends Integer, şu anlama gelir: Tamsayı olan ya da genişleten herhangi bir sınıf (veya Tamsayı bir arabirim ise Tamsayı uygular).

Aynı şey ? super Integer için de geçerlidir, yani: Tamsayı olan veya Tamsayı'nın süper sınıfı veya süper arabirimi olan herhangi bir sınıf.

+0

Bunu temizlemek için teşekkür ederim. Seçenek kullanıma hazır olduğunda cevabı kabul eder. – user3650602

İlgili konular