2016/12/15の30分 Kotlinメモ🐘
2016/12/15の30分 Kotlinメモ🐘
書いてるコードは雑にここにあります。
引き続きCalling Kotlin from Javaを読んでる
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様を意識するのそこそこ大変ですねーまったく...たのしいぜ