LoginSignup
5
3

More than 3 years have passed since last update.

javaからkotlin変換の色々メモ

Last updated at Posted at 2020-02-13

サーバーサイドのjavaアプリケーションを半年近くちまちまとkotlinに変換しています。多少はコツも掴めてきたので、メモ。

Intellij IDEAを使う

kotlinなんだから当然ですね。

変換

IDEAには、Javaコードをkotlinに自動変換する機能があるので、基本的にはそれを呼び出すだけです。ただし、自動変換できない・失敗するケースがいくつかあります。

その1:lombok

lombokは素敵なものですが、kotlinとの相性は悪いです。@Data,@Setterアノテーションなどlombokでコード生成しているjavaコードをkotlinから呼び出すことはできません。javaコードの修正が必要となります。IDEAの場合、"delombok"でlombokで生成されているコードをソースに展開してくれます。ちなみに、lombok使用のままでもIDE上では即時にはエラーにはならずに、ビルド時に失敗するので、最初はかなり悩みました。

その2:stream

streamで少し複雑な処理を記述しているとだいたい失敗します。手作業でちまちまと直します。コードがすごくすっきりして嬉しかったりする。

kotlinコードをjavaから呼び出す:static

kotlinには、javaのstaticメソッドが存在しません。companion object内のメソッドがそれに対応します。@JvmStatic アノテーションを付けることで、javaコードからstaticメソッドのように呼び出すことができます。

    companion object {
        @JvmStatic
        fun valueOf(value: Int?): Int {

kotlinコードをjavaから呼び出す:例外

javaからkotlinを呼び出す場合で、送出する例外を明示する場合は、@throwsアノテーションを使います。

@Throws(SQLException::class, IOException::class)
fun func() {
}

@Nonnull / @Nullableアノテーションを使う。

全てのコードがkotlinであればいいのですが、そうはいかないことが多いと思います。javaのコードには @Nonnull/@Nullable アノテーションでnull可能性を明示することで、呼び出すkotlin側で意図しないnull例外の発生を防ぐことができますし、コンパイルエラーで弾いてくれます。

メソッドのパラメーターへの再代入はできない

パラメーターは不変なので、再代入はできません。例えばこんなコードはエラーとなります。

fun func(s: String) {
  s = s.toUpperCase() // ERROR!
}

別の変数を割り当てましょう

fun func(sParam: String) {
  val s = sParam.toUpperCase()
}

とりあえずここまで。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3