前提
kotlin
1var Test:List<Int>? = listOf(0) 2Test = Test?.plus(2) 3println(Test) 4//[0,2]
発生している問題
kotlin
1var Test:List<Int>? = null 2Test = Test?.plus(2) 3println(Test) 4//[null,2]になってほしいが、実際はnull
###知りたいこと
kotlin
1//以下の質問では 2var Test:List<Int>? = null 3//を前提として、この宣言は変更できないとする。 4 5//Q1 6//plus()を用いてprint(Test)で「[null,2]」と表示させるにはどうすればよいか? 7//それが不可能な場合、どのメソッドを使えばよいか? 8 9//Q2 10//もしかしてnullなListにどれだけplus()しても元のListはNullのままか?
kotlin
1var Test:List<Int>? = null 2Test = listOf() 3Test = Test?.plus(2) 4println(Test) 5 //[2] 6//Q3 7//以上のように、一度ListをlistOf()で初期化するとnullが消えるが、 8//listOf()のような初期化を使用せずにTestの要素からnullを消して「2」を追加するにはどうすればよいか
Q4 これはQ1~Q3の質問を要因をするに至ったプログラムソースです。
kotlin
1data class testclass(var a: String? = null, var b: Int? = null, var c:List<Int>? = null) 2 3fun main() { 4 var test1:testclass? = null 5 var test2 = testclass("100",50,null) 6 test2.c = listOf(10,20) 7 println(test2) 8 //testclass(a=100, b=50, c=[10, 20]) 9 //test2.cはnullだったのにlistOfで代入できている!?(nullは何を代入してもnullのままのはず・・・) 10 test1 = test2 11 println(test1) 12 //testclass(a=100, b=50, c=[10, 20]) 13 //test1はnullで、test1のすべてのプライマリコンストラクタもnullなのに代入できている!? 14}
・「nullに代入」はできているのに、なぜ「nullにplus()」はできないのか。
・上記のtest1 = test2
とTest = Test?.plus(2)
の=
は違う働きをしているのか。
試したこと
もとはQ1を解決するためにいろいろ試していたが、その過程でQ2,Q3の疑問が生まれたため省略する。
補足情報(FW/ツールのバージョンなど)
Kotlin 1.9.24
Q1とQ3ですが、「何を目的として」そのようなことを行いたいのでしょうか?
訳あって詳しくは話せないないのですが・・・
・Springbootを用いてWebアプリを作成している
・formを用いてDBからデータをListで取ってきたい
・そのListはform内でTest:List<(オブジェクト名)> = nullとして定義されていて、変更できない
・そのListにDBからとってきたデータを代入したい
こんな感じですかね・・・。
> そのListはform内でTest:List<(オブジェクト名)> = nullとして定義されていて、変更できない
再代入できないのであれば、永遠にnullから変えることは不可能です。
回答4件
あなたの回答
tips
プレビュー