Kotlin実装中Javaライブラリ(Doma2)を利用しているときに、JavaにおけるFoo.class(Javaのクラスオブジェクト)を指定したい場面がありました。
結論
以下の記法でJavaのFoo.classオブジェクトを取得できます。
Foo::class.java
利用例
Doma2(クエリビルダ利用時)においてSQL発行時の利用例は以下になります。
val builder = SelectBuilder.newInstance(config) builder.apply { sql("select") sql("*") sql("from") sql("foo") } // リフレクションを利用してJavaクラスオブジェクトを取得 builder.getEntityResultList(Foo::class.java)
補足
Kotlinではリフレクションを::という記法で実現できます。
::classでKClass型のインスタンスを取得し、.javaでJavaのクラスオブジェクトを取得しています。
ちなみに、このKClass型ではクラスオブジェクト以外にも様々な情報が取得でき、例えば.membersPropertiesではそのオブジェクトのプロパティ自体のリストが取得できます。(変数名をStringで取得できる)
Kotlin公式リファレンスの以下ページにリフレクションやJavaとの相互運用に関しての記載があるので、そちらも参考にしてください。
https://kotlinlang.org/docs/reference/reflection.html#reflection
https://kotlinlang.org/docs/reference/java-interop.html#java-reflection