分解宣言
Kotlinでは、分解宣言という仕組みがあるが、代入先はローカル変数のみが可能で、
メンバ変数の場合、以下のエラーが発生する。
Destructuring declarations are only allowed for local variables/values
動作環境
- Kotlin 1.6.10
エラーが発生する例
data class Data(
val data1: String,
val data2: String,
val data3: String
)
class Test {
// メンバ変数のため分解宣言不可
val (test1, test2, test3) = Data("string1", "string2", "string3")
fun print() {
print("${test1}, ${test2}, ${test3}")
}
}
fun main() {
val test = Test()
test.print()
}
エラーが発生しない例
data class Data(
val data1: String,
val data2: String,
val data3: String
)
class Test {
fun print() {
// ローカル変数のため分解宣言可能
val (test1, test2, test3) = Data("string1", "string2", "string3")
print("${test1}, ${test2}, ${test3}")
}
}
fun main() {
val test = Test()
test.print()
}
discuss.kotlinlang.orgにはトピックとして挙がっているが、特に回答はなく、不可である理由は不明。
(日本語での情報も特にないので、もしかすると当たり前の常識なのかもしれない?)
参考