1.0 stdlib gelen Nothing
kullanılarak: Array<Nothing>
olarak
/* requires passing all arguments by name */
fun f0(vararg nothings: Nothing, arg0: Int, arg1: Int, arg2: Int) {}
f0(arg0 = 0, arg1 = 1, arg2 = 2) // compiles with named arguments
//f0(0, 1, 2) // doesn't compile without each required named argument
/* requires passing some arguments by name */
fun f1(arg0: Int, vararg nothings: Nothing, arg1: Int, arg2: Int) {}
f1(arg0 = 0, arg1 = 1, arg2 = 2) // compiles with named arguments
f1(0, arg1 = 1, arg2 = 2) // compiles without optional named argument
//f1(0, 1, arg2 = 2) // doesn't compile without each required named argument
KOTLIN yasadışı, vararg nothings: Nothing
için bir değer (herhalde yansıma kısa) geçirilecek oluşturulamaz. Bu biraz bir hack gibi görünüyor ve ben Nothing
tip boş dizi için bayt kodu bir yük vardır ama işe yaradığını sanıyorum. Bu yaklaşım, vararg
kullanamayan veri sınıfı birincil kurucular için çalışmaz, ancak bunlar private
olarak işaretlenebilir ve ikincil kurucular vararg nothings: Nothing
ile kullanılabilir.
Bu yaklaşım, ancak, Kotlin 1.1'de çalışmıyor: "Forbidden vararg parameter type: Nothing". :-(
Neyse ki, umut (Nothing
benzeri) Özel bir yapıcısı ile kendi boş sınıfı belirlenerek bu deseni çoğaltabilirsiniz. KOTLIN 1.1'de kaybetti ve kullanmıyor ilk parametreyi varargs olarak. Tabii ki, Zorla adlandırılmış argümanların resmi olarak desteklenmesi durumunda bu yapılmazdı:
İlgili Kotlin hatası: https://youtrack.jetbrains.com/issue/KT-14934 –