2016/12/25の30分 Kotlinメモ🍰

2016/12/25の30分 Kotlinメモ🍰

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

github.com

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

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

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

Class Delegation

kotlinlang.org

前も書いたけど、これはよい。

そしてinterfaceのメソッドの引数にもデフォルト引数使えるんだーという発見。

interface GreeterKai {
    // sayHello()で呼び出すとデフォルト引数の方じゃなくて、引数なしで定義したメソッドが呼ばれるF
    fun sayHello()

    // デフォルト引数は指定できるのね
    fun sayHello(target: String = "匿名")
}

class JapaneseGreeterKai : GreeterKai {
    override fun sayHello() {
        sayHello("匿名")
    }

    override fun sayHello(target: String) {
        println("こんにちは、$target!")
    }
}

class GreeterWithRecording(private val greeterKai: GreeterKai) : GreeterKai by greeterKai {
    private val _target: MutableSet<String> = mutableSetOf()

    val targets: Set<String>
        get() = _target

    override fun sayHello(target: String) {
        _target += target
        greeterKai.sayHello(target)
    }
}

val gr = GreeterWithRecording(JapaneseGreeterKai())
gr.sayHello("test") // こんにちは、test!
gr.sayHello() // こんにちは、匿名!
gr.sayHello("kotlin") // こんにちは、kotlin!
println(gr.targets) // [test, kotlin]

Generics

kotlinlang.org

今のところ出てきたものはJavaとそこまで変わらず。

whereがちょっと変わってるかなー?みたいなところかねー

class Container<T>(val value: T) {
}

// Javaで書く T extends Collection<String>
 class Container2<T : Collection<String>>(val value: T) {
}

class Container3<T>(val value: T)  where T : Collection<String>, T : List<String> {
}

interface A {
}

interface B {
}

class Container4<T>(val value: T)  where T : A, T : B {
}

まとめ

メリークリスマス🍰