Kotlinの変数名の前にアスタリスクが正確に何をするかを知りたい。これを見た (*args
)at スプリングブートKotlinの例 :
@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)
}
*
演算子は、Kotlinでは Spread Operator として知られています。
Kotlin Reference ...から.
Vararg-functionを呼び出すとき、引数を1つずつ渡すことができます。 asList(1、2、3)、または既に配列があり、その内容を関数に渡したい場合は、スプレッド演算子を使用します(配列の先頭に*を付けます)。
varargs
を受け入れる関数に渡す前に、配列に適用できます。
さまざまな数の引数を受け入れる関数がある場合...
fun sumOfNumbers(vararg numbers: Int): Int {
return numbers.sum()
}
次のように配列を渡すことができます...
val numbers = intArrayOf(2, 3, 4)
val sum = sumOfNumbers(*numbers)
println(sum) // Prints '9'
注:
*
演算子は、乗算演算子(もちろん)です。apply
関数に似ています。「これは何だ!?!」に直接向けられた答えに加えて、List
があり、vararg
。このための変換は次のとおりです。
someFunc(x, y, *myList.toTypedArray())
someFunc
の最後のパラメーターが、リスト内の要素と同じ型のvararg
であると仮定します。
ドキュメント で説明されているように、これはスプレッド演算子です:
Vararg-functionを呼び出すとき、引数を1つずつ渡すことができます。 asList(1、2、3)、または既に配列があり、その内容を関数に渡したい場合は、スプレッド演算子を使用します(配列の前に*を付けます)。
val a = arrayOf(1, 2, 3) val list = asList(-1, 0, *a, 4)
Javaでは配列をそのまま渡すことができますが、スプレッド演算子*
を使用して配列をアンパックする利点は、スプレッド演算子で配列の値といくつかの固定値を結合できることです単一の呼び出し。Javaはこれをサポートしません。
Vararg(Variable number of arguments)パラメーターを受け入れる関数が次のような場合:
_fun sum(vararg data:Int)
{
// function body here
}
_
このメソッドを呼び出すために、次のことができます。
_sum(1,2,3,4,5)
_
しかし、配列にこれらの値がある場合、次のようになります。
_val array= intArrayOf(1,2,3,4,5)
_
次に、このメソッドを呼び出すには、次のようなスプレッド演算子を使用する必要があります。
_ sum(*array)
_
ここで、*(スプレッド演算子)はその配列のすべてのコンテンツを渡します。
* arrayは1,2,3,4,5と同等です
しかし、ちょっと待ってください。これをsum(array)
のように呼び出すと、Type Mismatch compile timeエラーが発生します。
_Type mismatch. Required:Int Found:IntArray
_
問題はsum
関数が_vararg Int
_パラメーター(1,2,3,4,5のような値を受け入れる)を受け入れ、配列を渡す場合、IntArray
として渡されることです。