複数Int
のsを取るvararg関数があります。私が持っているArray<Int>
私は、入力として使用したいということ。
SpreadOperatorを使用して関数を呼び出す試みは次のとおりです。
fun printNumbers(vararg numbers: Int) {
numbers.forEach { it -> println(it) }
}
val numbers: Array<Int> = arrayOf(1, 2, 3)
printNumbers(*numbers)
ただし、次のタイプの不一致エラーが発生します。
error: type mismatch: inferred type is Array<Int> but IntArray was expected
printNumbers(*arrayOf<Int>(1, 2, 3))
^
特に、でspread演算子を使用できるため、このエラーが発生する理由がわかりませんArray<String>
。例えば...
fun printStrings(vararg strings: String) {
strings.forEach { it -> println(it) }
}
val strings: Array<String> = arrayOf("hello", "there", "stackoverflow")
printStrings(*strings)
出力:
hello
there
stackoverflow
私はそれを変換することが可能であったかどうかを確認するためにオンラインで検索Array<Int>
しIntArray
、これはコンパイラを満たす可能性があるとして、。逆の変換(IntArray
からArray<Int>
)以外は何も見えませんでした
を呼び出すときにジェネリック型を指定してみましたarrayOf
。例えばarrayOf<Int>(1, 2, 3)
。これは(明らかな理由で)機能しませんでした。
Kotlinバージョン1.0.3を使用しています
私の混乱の一部は、Array<Int>
との違いとIntArray
、どちらを選択するかを理解していないという事実に起因していると思います。
Array<Int>
複数Int
のを期待するvararg関数にを渡すにはどうすればよいですか?
基本的に、Array<Int>
は内部のボックス化されたInteger
オブジェクトIntArray
の配列ですが、プリミティブint
値の配列に変換されます(この回答を参照)。
をArray<Int>
vararg関数に渡すには、toIntArray()
関数を使用してIntArray
最初の関数に変換します。
val numbers: Array<Int> = arrayOf(1, 2, 3)
printNumbers(*numbers.toIntArray())
または、可能であれば、IntArray
最初に配列を作成します。これにより、プロセスでの余分な配列の割り当てや、個々の値のボックス化を回避できます。
val numbers: IntArray = intArrayOf(1, 2, 3)
printNumbers(*numbers)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加