2016/12/15の30分 Kotlinメモ🐘

2016/12/15の30分 Kotlinメモ🐘

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

github.com

引き続きCalling Kotlin from Javaを読んでる

kotlinlang.org

Static Fields

companion objectのプロパティとかconstね。

object Obj {
    const val CONST = 1

    @JvmField
    var LIST = listOf("")
}

class C {
    companion object {
        const val VERSION = 9
    }
}

const val MAX = 239

// Java
int c = Obj.CONST;
int d = SaSasSa.MAX;
int v = C.VERSION;
System.out.println(C.LIST);

Static Methods

@JvmStaticつけんとあかんで!って話。

class C {
    companion object {
        @JvmStatic fun cccccccc() {
            println("cccccccc")
        }
    }
}

// Java
C.cccccccc();

Overloads Generation

Kotlinのdefault parameter valuesがどうJavaから見えるかって話。

@JvmOverloadsをつければ、オーバーロードしてくれるって話。

つけないと引数が必ず必要になるよー

class Sample {
    @JvmOverloads fun humuhumu(i: Int = 0, s: String = "humuhumu") {
        println("i = $i,s = $s")
    }
}

// Java
Sample sample = new Sample();

sample.humuhumu();
sample.humuhumu(1);
sample.humuhumu(1, "test");

Checked Exceptions

Kotlinにはチェック例外がないんだよねー

これJavaから呼び出すときに困っちゃうわけよ

なので@Throwsをつければ、チェック例外として認識してくれるよー

Javaから呼び出されることを前提にするなら覚えておいた方が良さそう

class Sample {
    @Throws(IOException::class)
    fun okooko() {
        throw IOException()
    }
}

// Java
try {
    sample.okooko();
} catch (IOException e) {
    e.printStackTrace();
}

Null-safety

Kotlinのnon-null parameterに対してJavaからnullを渡すとRuntimeで落ちるぞ!って話

Kotlin側でnon-null parameterにnullが来ているかどうかチェックしてるからね!って話

class Sample {
    fun nullnullnull(s: String) {
        println(s)
    }

    fun nullnullnullnull(s: String?) {
        s?.let { println(it) }
    }
}

// Java
Sample sample = new Sample();

// java.lang.IllegalArgumentException: Parameter specified as non-null is null: method test.Sample.nullnullnull, parameter s
sample.nullnullnull(null); 

// OK
sample.nullnullnullnull(null);

まとめ

KotlinからJava様を意識するのそこそこ大変ですねーまったく...たのしいぜ