Help us understand the problem. What is going on with this article?

javaからkotlin変換の色々メモ

サーバーサイドの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()
}

とりあえずここまで。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした