2016/12/26の30分 Kotlinメモ🍙

2016/12/26の30分 Kotlinメモ🍙

書いてるコードは雑にここにあります。

github.com

Kotlinスタートブック -新しいAndroidプログラミング を引き続き読んでる。

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

Type projections

kotlinlang.org

説明すると難しいし、俺もまだあまり理解できてないというか、これでいいのかな?レベルなのでなんともー

とりあえずoutとinがあり、不変、共変、反変ということを理解すればいいかも。

Tって普通に書くと不変であり、サブタイプの関係は成り立たないらしい。

面倒そうだけど、安全な気がするねー。

class Container5<T>(var value: T) {
    fun copyTo(to: Container5<in T>) {
        to.value = value
    }
}

class Container6<out T>(val value: T) {
}

fun show(container5: Container5<out Any>) {
    println(container5.toString())
    println(container5.hashCode())
    println(container5.value)
}

fun show6(container6: Container6<Any>) {
    println(container6.toString())
    println(container6.hashCode())
    println(container6.value)
}

val c5: Container5<Number> = Container5(10)
Container5(10).copyTo(c5)
show(c5)

val c6: Container6<Number> = Container6(10)
show6(c6)

Star-projections

*ね。

Star-projectionsとかなんかジョジョっぽくね?かっくいいー!!

val c52: Container5<*> = Container5(10)
c52.value.toString() // Any?型になる

Reified type parameters

kotlinlang.org

あーこれねー

Javaで困るやーつーだな

Kotlinだと楽なんだなーいいなー

// inline + reified
inline fun <reified T> Any.instanceOf(): Boolean = this is T

println("".instanceOf<String>()) // true
println("".instanceOf<Int>()) // false

まとめ

ねぇ?Kotlin。そろそろ僕に心を開いてくれてもいいんじゃないかな?ね?