Kotlinで作成したライブラリをJava向けに少し改良した

先日作成したロギング用のライブラリですが、Kotlin で記述してます。

さて、このライブラリ、Javaから使う場合はどのように見えるのか、Java向けの修正が必要なのはどこか調べてみました。

元のライブラリに関してはこちら

環境

  • macOS Sierra 10.12.6
  • Android Studio 3.0

Kotlinで作成したライブラリがJavaからどう見えるのか

今回作成したロガーは、KotlinのCompanion オブジェクトを使ってグローバルな設定をできるようになっています。

また、高階関数を使って実処理の前後に処理を挟むというような処理を行っています。

Kotlin からこのライブラリを使った場合、下記のようなコードになります。

こんな感じのログが出力されます

これと同等のことをしたJavaコードがこちら

だいぶイケてない感じになりました

  • Companionは Companion という名前のスタティックなインスタンスに見える。
  • プロパティアクセスは setter と getter が自動定義されているようなのでそれを使う。
  • 高階関数は引数に応じたインターフェイスが定義されているのでそれを使う(Function22まであった)

Java向けのライブラリ改良

まずCompanion というインスタンスを挟むのがちょっと馴染めないので、Companion を挟まなくても良いように改良します。

可変なプロパティに関しては @JvmStatic でCompanion を挟まずにアクセスできるようになります。

また、定数値に関しては const 修飾子をつけることで、Companion を使わず、getter もなくアクセスできるようになります。

ライブラリ改良後のJavaの呼び出しコードが下記。だいぶましになりました。高階関数に関しては、Javaが関数を第一級オブジェクトとして扱えない性質上、仕方ないかなと思います。

ただし・・・実はJava の方だとtrace のログが意図しない感じになっているので、このあたりはもう少し改良の余地がありそうです。

関数名が trace になっちゃいました。

さいごに

2018年には Android の Kotlin のシェアは Java を上回る予測がでているそうです。

とはいえ、Javaがなくなるということは無いと思いますので、Kotlinでライブラリ作るにしてもJavaで使われる可能性は考えてコード書いたほうが良さそうですね。


最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。



この記事をシェアする




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA