この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
kotlin:共変_反変 [2019/11/26 00:49] ips |
kotlin:共変_反変 [2019/11/26 01:28] (現在) ips [Listの場合] |
||
---|---|---|---|
ライン 32: | ライン 32: | ||
===== 共変(out) ===== | ===== 共変(out) ===== | ||
+ | |||
+ | <WRAP center round tip 90%> | ||
+ | valとして変更しない、参照用(out)として値を設定する | ||
+ | 上位のAny型に、下位のint型を設定しているが、Any型として参照しかしない(out)ので安全。 | ||
+ | </WRAP> | ||
+ | |||
<code kotlin> | <code kotlin> | ||
ライン 49: | ライン 55: | ||
</code> | </code> | ||
===== 反変(in) ===== | ===== 反変(in) ===== | ||
+ | |||
+ | <WRAP center round tip 90%> | ||
+ | varの値を変更する。 | ||
+ | 下位のHuman型の配列に、上位のAnimal型の配列を設定しているが、Animal型としてしか参照しないので安全。 | ||
+ | </WRAP> | ||
+ | |||
<code kotlin> | <code kotlin> | ||
ライン 77: | ライン 89: | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ===== Listの場合 ===== | ||
+ | listはそもそも不変ではない。 | ||
+ | <code> | ||
+ | val intList = listOf<Int>(1,2,3) | ||
+ | val strList= listOf<String>("a","b","c") | ||
+ | val anyList:List<Any> = intList + strList | ||
+ | |||
+ | anyList.forEach { | ||
+ | println(it) | ||
+ | } | ||
+ | | ||
+ | ↓ | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | a | ||
+ | b | ||
+ | c | ||
+ | |||
+ | val anyList2 = listOf<Any>("a","b","c") | ||
+ | // val intList2:List<Int> = anyList2 コンパイルエラー | ||
+ | </code> | ||
+ |