LoginSignup
9
13

More than 5 years have passed since last update.

javaからkotlinへの移行メモ

Last updated at Posted at 2017-06-01

はじめに

kotlinがAndroidの公式言語となり、これからはkotlinで開発することが多くなりそうです。
仕事で一部のjavaクラスをkotlinに置き換える機会があったので
一括置換ではうまくいかなかった部分をどのように修正したかをメモとして残しておきます。
Android開発はまだ1年目なので至らない部分はあるかと思いますがご了承ください。

参考

やったこと

一括置換を行う

はじめにCodeメニューからconvert Java File to Kotlin Fileを選択します。

だいたいはうまく置換してくれます。

return@~以降の記述を正しいものにする

基本returnはメソッドを抜ける時に使用しますが
ラムダの中で記述してあるとメソッドを抜けるのかラムダを抜けるのかが正しく判断してくれないようです。
returnの後に@を打てば正しいものが候補に出てくると思います。

staticメソッドに@JvmStaticをつける

これはjavaからkotlinのstaticメソッドにアクセスできるようにするための修正です。

メンバー変数のmをとる

IDEの機能でリネームを行えば手作業より間違いがないのでそれを利用します。

メンバー呼び出しで「!!」の記述があるところは適宜修正する

これはメンバーがnullであっても実行されるので修正します。
以下の方法があります。
* 渡している変数をNotNullに変更する
* Null安全呼び出しにする

関数の引数に「!!」がついた変数を渡さないように修正する

  • スコープ関数を利用して非Nullであることを保証する
修正前.kt
hoge.fuga(piyo!!)
修正後.kt
piyo?.let {
hoge.fuga(it)
}

@BindDrawableを利用しているところはlazyプロパティに変更する

例.kt
internal val icon: Drawable? by lazy {
ResourcesCompat.getDrawable(resources, R.drawable.icon, null)
}

明示的に型指定、型変換をする

修正前.kt
bundle.getLong(hogehoge) != 0)
修正後.kt
bundle.getLong(hogehoge) != 0L)

可能な箇所はvarをvalに変更する

onCreateなどで初期化を行っている箇所などはlazyプロパティを利用して遅延初期化を行うなどの対応ができると思います。

internalは同一モジュール内で全公開となるので、必要ないのであればprivateにする

internal -> private

必要ならばasをas?に変更する

findFragmentByTagをしている部分など

シングルトンが自動変換されない

object キーワードを利用したシングルトンに置き換える

ラムダ式になっている部分の使用されていないパラメータは、「_」にリネームしたり、取り除く

今回はリファクタも行いました。

さいごに

他にも修正点がありそうなのですが今回対応した分は以上です。
また新たに修正点がでてきたら更新していこうと思います。

9
13
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
9
13