2016/12/11の30分 Kotlinメモ🎉
2016/12/11の30分 Kotlinメモ🎉
書いてるコードは雑にここにあります。
"Unsafe" cast operator
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
失敗の時はnullが返る。まあ使うならこっちかな?
val iii = 0 val sss: String? = iii as? String // null println(sss)
Declaration-site variance
うーん、あまり知らずに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
なんでもかかったこいやー!な*
さん。
下の例だと型が決まってないので、Any?になる。
val ints: Array<Int> = arrayOf(1, 2, 3) val nums: Array<*> = ints val jjjjj: Any? = nums.get(0) println(jjjjj)
まとめ
そろそろ何をやったのか忘れそうな雰囲気🙉