syntaxkotlin

Kotlin asterisk operator before variable name or Spread Operator in Kotlin


I want to know what exactly an asterisk does before a variable name in Kotlin. I saw this (*args) in a Spring boot Kotlin example:

@SpringBootApplication
open class Application {

    @Bean
    open fun init(repository: CustomerRepository) = CommandLineRunner {
        repository.save(Customer("Jack", "Bauer"))
        repository.save(Customer("Chloe", "O'Brian"))
        repository.save(Customer("Kim", "Bauer"))
        repository.save(Customer("David", "Palmer"))
        repository.save(Customer("Michelle", "Dessler"))
    }
}

fun main(args: Array<String>) {
    SpringApplication.run(Application::class.java, *args)
}

Solution

  • The * operator is known as the Spread Operator in Kotlin.

    From the Kotlin Reference:

    When you call a vararg-function, you can pass arguments individually, for example asList(1, 2, 3). if you already have an array and want to pass its contents to the function, use the spread operator (prefix the array with *):

    It can be applied to an Array before passing it into a function that accepts vararg.

    For Example...

    If you have a function that accepts a varied number of arguments...

    fun sumOfNumbers(vararg numbers: Int): Int {
        return numbers.sum()
    }
    

    Use the spread operator to pass an array's elements as the arguments:

    val numbers = intArrayOf(2, 3, 4)
    val sum = sumOfNumbers(*numbers)
    println(sum) // Prints '9'
    

    Notes: