Esasen List<? extends String>
bilinmeyen türde bir listesi olduğunu, bilindiği tüm bu tip Dize uzanır olmasıdır. Değişkenin List<String>
örneğini içermesi önemli değildir. A
bir alt sınıf B
bazı sınıftır
List<? extends A> list = new ArrayList<A>();
: o yüzden düşünelim ...
Şimdi dize kesindir, bu nedenle alt sınıf yoktur. kullanıldığında, tip List<? extends A>
bir değişken List<B>
örneğidir olabilir. Bir A
bir B
değil olasılığı vardır çünkü buna A
ekleyemezsiniz.
Ama bunun doğru olacağını biliyorum? Peki, derleyici değil, bilinmeyen tür ve başlattıklarınız arasındaki mantıksal bağlantıları da öngörmez, çünkü genel olarak bu değişkeni çalışma zamanında değiştirebilirsiniz.
benzer bir örnek için bir yöntem (Set<T>, T)
kabul eder ve yasadışı arama Set<?>
değişken Set<String>
bir örneğini içerir rağmen (Set<?>, String)
kullanılarak preposed edilir iyimser More Fun with Wildcards adlı öğretici bulunmaktadır. Sorun, extends
eklenmesine rağmen burada aynıdır.
Gerçekten 'String' bir ** final ** sınıfı olduğu için mantıklı değil! 'String' uzatabilecek bir sınıf yoktur. Yani, yapmanız gereken tek şey onu 'List 'olarak tanımlamak. –
bobbel
ancak nesne olarak String olan ArrayList referansını nasıl alıyor? –
'List' Listesini yerine getirdi String> 'öğesini genişletir. Fark * String bir String'dir * ancak * String bir olmayabilir? Bu bir String *. –
Linus