算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Kotlin M10で追加されたreified type parameterがいい感じ

reified type paramter = 具象化された型パラメータ

名前が強そう。

目的としてはKotlinでJavaクラス(Classインスタンス)を得るための関数javaClassをもっと楽に使えるようにすることっぽい。

例えば今までは、こういう関数↓を作るには引数としてClassインスタンスを受け取る必要があった。

fun getName(clazz: Class<*>): String = clazz.getSimpleName()

まーこんくらいなら別にいいんだけど、これを使う側がちょっとあれになる。

val name = getName(javaClass<StringBuffer>())
println(name) // => StringBuffer

getName(javaClass<StringBuffer>())ってのがダサい。

getName<StringBuffer>()というコードが書けたらイカす。

ということでreified type parameterがこれを実現してくれる!

こんな感じで使います。

inline fun getName<reified T>(): String = javaClass<T>().getSimpleName()

型変数の宣言のところにreifiedというキーワードを置く。

さらにreifiedがある関数は必ずinline指定しなければならない。

val name = getName<StringBuffer>()
println(name) // => StringBuffer

うん、便利だ!

Classを使う場面って普段はあまりないけどフレームワークとか作ってると使いたくなることが多い。

以前ちょこっとだけ作ったKotlinでDIしてくれるやつに、このreified type parameterの仕組みを取り入れた。

今までinjector.getInstance(javaClass<HelloWorld>())と書いていたのをinjector.getInstance<HelloWorld>()って書けるの本当ありがたい。