แปลง Kotlin Array เป็น Java varargs


121

ฉันจะแปลง Kotlin ของฉันArrayเป็น varargs Java ได้String[]อย่างไร

val angularRoutings = 
    arrayOf<String>("/language", "/home")

// this doesn't work        
web.ignoring().antMatchers(angularRoutings)

จะส่ง ArrayList ไปยังพารามิเตอร์เมธอด varargs ได้อย่างไร

คำตอบ:


233

คุณควรใช้ตัวดำเนินการกระจายซึ่งมีลักษณะดังนี้: *
ตัวดำเนินการกระจายจะต้องวางไว้หน้าอาร์กิวเมนต์อาร์เรย์:

antMatchers(*angularRoutings)

สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารประกอบ :

เมื่อเราเรียกใช้ a- varargfunction เราสามารถส่งผ่านอาร์กิวเมนต์ทีละตัวเช่นasList(1, 2, 3)หรือถ้าเรามีอาร์เรย์อยู่แล้วและต้องการส่งผ่านเนื้อหาไปยังฟังก์ชันเราจะใช้ตัวดำเนินการกระจาย (นำหน้าอาร์เรย์ด้วย*):

โปรดทราบว่าตัวดำเนินการกระจายถูกกำหนดไว้สำหรับอาร์เรย์เท่านั้นและไม่สามารถใช้กับรายการได้โดยตรง เมื่อจัดการกับรายการให้ใช้เช่นtoTypedArray()เพื่อแปลงเป็นอาร์เรย์:

 *list.toTypedArray()

แล้วจะแปลงกลับยังไง?
lacas

@Iacas "แปลงกลับ" หมายความว่าอย่างไร A varargคาดหวังองค์ประกอบแต่ละรายการและ*arrayเป็นวิธีที่ Kotlin พูดว่า "ถือว่าอาร์เรย์นี้เป็นองค์ประกอบเดี่ยวสำหรับวัตถุประสงค์นั้น" ภายในvarargฟังก์ชันvarargพารามิเตอร์ก็จะเป็นอาร์เรย์อยู่ดี ในการแปลงแต่ละองค์ประกอบเป็นอาร์เรย์คุณสามารถใช้ได้arrayOf(...)แต่คุณไม่จำเป็นต้องใช้ในกรณีนี้
Dario Seidl

3
โปรดทราบว่าสิ่งนี้มีโทษประสิทธิภาพสูงมาก sites.google.com/a/athaydes.com/renato-athaydes/posts/…ตรวจสอบ Varargs หรือmedium.com/@BladeCoder/…
svkaka

มีวิธีการหลีกเลี่ยงการใช้ประกอบการแพร่กระจายและผ่านอาร์เรย์หรือบางรายการที่ต้องใช้วิธีการที่ยอมรับใด ๆvararg?
Wackaloon

@DarioSeidl เขาหมายถึง: จะเกิดอะไรขึ้นถ้าเรามีสตริง varargs และเราต้องการส่งผ่านไปยังฟังก์ชันที่คาดว่าจะมีอาร์เรย์ของสตริง?
นักพัฒนา Android
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.