はじめに
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であることを保証する
hoge.fuga(piyo!!)
piyo?.let {
hoge.fuga(it)
}
@BindDrawableを利用しているところはlazyプロパティに変更する
internal val icon: Drawable? by lazy {
ResourcesCompat.getDrawable(resources, R.drawable.icon, null)
}
明示的に型指定、型変換をする
bundle.getLong(hogehoge) != 0)
bundle.getLong(hogehoge) != 0L)
可能な箇所はvarをvalに変更する
onCreateなどで初期化を行っている箇所などはlazyプロパティを利用して遅延初期化を行うなどの対応ができると思います。
internalは同一モジュール内で全公開となるので、必要ないのであればprivateにする
internal -> private
必要ならばasをas?に変更する
findFragmentByTagをしている部分など
シングルトンが自動変換されない
object キーワードを利用したシングルトンに置き換える
ラムダ式になっている部分の使用されていないパラメータは、「_」にリネームしたり、取り除く
今回はリファクタも行いました。
さいごに
他にも修正点がありそうなのですが今回対応した分は以上です。
また新たに修正点がでてきたら更新していこうと思います。