2016/12/11の30分 Kotlinメモ🎉

2016/12/11の30分 Kotlinメモ🎉

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

github.com

"Unsafe" cast operator

kotlinlang.org

Castっすね。

Castできないと例外が起きるよーん。Nullableじゃないとnullでも落ちるよーん。

val iii = 0
val sss = iii as String // ダメー
val sss = iii as String? // ダメー
val sss = null as String? // null
println(sss)

"Safe" (nullable) cast operator

kotlinlang.org

失敗の時はnullが返る。まあ使うならこっちかな?

val iii = 0
val sss: String? = iii as? String // null
println(sss)

Declaration-site variance

kotlinlang.org

うーん、あまり知らずにout使ってたけど、今もようわからなんです。

こういうのはもう少し実践的なコード書かないとあれだなー。

abstract class Momo<out T> {
    abstract fun momo(): T

    // outなので引数には使えない
//    abstract fun momo(mo: T): T
}

class Mooo : Momo<String>() {
    override fun momo(): String {
        return "mooo"
    }
}

fun momomomo(momo: Momo<String>) {
    val mooooooo: CharSequence = momo.momo()
    println(mooooooo)
}

momomomo(Mooo())

inも。

abstract class HunHun<in T> {

    abstract fun hunhun(hunhun: T): String

    // inなので戻り値には指定できない
//    abstract fun hunhun(hunhun: T): T
}

class Hunga : HunHun<Int>() {
    override fun hunhun(hunhun: Int): String {
        return hunhun.toString()
    }
}

fun hunhunhun(hunhunhun: HunHun<Int>): String {
    return hunhunhun.hunhun(10)
}

println(hunhunhun(Hunga())) // 10

Star-projections

kotlinlang.org

なんでもかかったこいやー!な*さん。

下の例だと型が決まってないので、Any?になる。

val ints: Array<Int> = arrayOf(1, 2, 3)
val nums: Array<*> = ints
val jjjjj: Any? = nums.get(0)
println(jjjjj)

まとめ

そろそろ何をやったのか忘れそうな雰囲気🙉