Kotlin移行2

目的

  • Javaで書かれたプロジェクトを少しずつKotlinで書き直す
  • TestもKotlin化
  • 備忘録的にちょこちょこ完了まで続ける

条件

  • AndroidStudio3.1.4
  • Java1.8.0_152
  • Kotlin 1.2.70
  • gradle 4.9

今回の作業範囲

  • 某リリース済アプリのとあるModelクラスをKotlin化

前提

  • 解析用モデルクラスとして10クラスほどあり、全てベースのModelクラスを継承している
    • ベースのModelクラスには全解析パラメータが記述されている
    • 継承先Modelクラスでは、扱う値は全てNonNullとしている
  • Builderパターンをlombokで実装している
    • DataBindingで実装中のため、lombokを廃止する必要がある

手順と具体的な作業

継承元はopenなclassにする

Before: BaseTracking.java

After: BaseTracking.kt

継承先のModelクラスをdata classにする

Before: HogeTracking.java

After: HogeTracking.kt

まとめ

data classの継承に関しては色々調べると、interfaceがよいという記事があり参考になった。
しかし今回の要件として、Tracking内容は一律毎回同じ要素数を送る、ということだったのでinterfaceで宣言してしまうと、
継承先で全ての要素を定義しないとならなくて冗長になってしまうので、BaseTrackingクラスは上記の形に落ち着きました。
Kotlinのoverride valのおかげで、NonNull要件を満たし、Javaでrebuildしてsuper.aにわざわざ突っ込み直す必要がなくなってすっきり。
lombok撤廃できたがJava混在中なので、BuilderパターンのJava呼び出し箇所は書き換えざるを得なかった。

参考リンク
http://y-anz-m.blogspot.com/2017/07/kotlin-data-class-interface.html
http://exception-think.hatenablog.com/entry/20170812/1502474400
https://qiita.com/ngsw_taro/items/75cdd8034bfd09abd29f