Eh, bu konuda% 100 emin değilim, ama bu varargs ile ilgisi yoktur düşünüyorum, ama daha dinamik bağlama, jenerik ve tip silme gibi.
"Java'daki diziler değişkendir, ancak jenerikler değil. Başka bir deyişle, String [] bir Object [] alt dizisidir, ancak Stack Stack'in bir alt türü değildir."
Kaynak: http://algs4.cs.princeton.edu/13stacks/
Yani soruyu cevaplamak için, bu davranış belgelenmiş ve beklenen belirtilir. Kitapta
: 'Etkili Java' Joshua Bloch şöyle açıklıyor:
Diziler iki önemli noktada jenerik türlerinden farklıdır. İlk olarak, diziler kovaryanttır. Bu korkutucu-iskandil kelimesi, eğer Sub bir Süper alt-tipi ise, o zaman Sub [] dizi tipi Super [] 'un bir alt-tipi anlamına gelir. Aksine, jenerikler değişmezdir: herhangi bir iki tip için Type1 ve Type2, List <Type1>, ne tür bir alt tip ne de bir üst tip olan List < [JLS, 4.10; Naftalin07, 2.5]. Bunun jeneriklerin eksik olduğu anlamına geleceğini düşünebilirsiniz, ancak tartışmasız eksik olan dizilerdir.
Ve neden dizilerden bahsedebilirim? Eh, çünkü varargs en sonunda diziler haline gelecek.
"Geçmiş sürümlerde, rasgele bir değer sayısı alan bir yöntem, bir dizi oluşturmanızı ve bu yöntemi çağırmadan önce değerleri diziye koymanızı gerektiriyordu."
"Birden çok bağımsız değişkenin bir dizide geçirilmesi gerektiği doğrudur, ancak varargs özelliği işlemi otomatik hale getirir ve gizler."
Kaynak: Bu cevap% 100 Aradığınız cevabı olmayabilir, ama belki yardımcı olur https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html
Buradaki cevabın burada "denediğim her derleyici ile her zaman en azından bazı uyumsuzluklara sahip olan, anlaşılmaz karmaşıklıklarındaki tüm tür çıkarım kuralları" olmasını beklerim. –
Muhtemelen: http://docs.oracle.com/javase/specs/jls/se8/html/jls-18.html#jls-18.5.1 ve takip ediyor. – assylias