RealmObjectにLombokを使おうと思ったら死んでしまった話

久しぶりに書きます、またまたAndroidの話です。

さてネイティブアプリ自身にデータベースを持つアプリケーションは様々あると思います。

Androidでは標準でSQLiteがサポートされているのでこちらを使う方がほとんど?だと思います。 そんな中最近Realmというライブラリが注目を集めているようなので実際に使ってみました。

realm.io

※ちなみに今回の記事はRealmの紹介記事ではないので、紹介記事が見たい方は他の記事を参考にしてください。

使ってみて思ったこと

実際に使ってみて思ったこととしては簡単に使えるという印象でした。

コードを書き始めて間もなく、データベースがまったくわからないけどデータベースを使ってみたいと考えている初学者にとってはかなり使いやすく、開発スピードがとても速くなると思います。

逆に悪い点についてですが、それが今回の記事の中身だったりするので感想はこれくらいにして本題に入りたいと思います。

Lombokが使えない!!

きれいなコードを書くため冗長なコードはできるだけ避けることはみなさん意識していると思います。

Androidではそんな人達のためにLombokという素晴らしいライブラリが存在しており、精神衛生上良いコードを書くためにいつも使わせて頂いています。

projectlombok.org

※ちなみに今回はLombokの導入記事でもありません。

そしてやっと今回の本題の問題にぶつかるのですが、RealmObjectを

@Getter
public class User extends RealmObject {
    private int id;
    private String name;
}

という感じで記述するとエラーがでます。

error: Only getters and setters should be defined in model classes

このエラーを見た瞬間に「あ、察し」だったのですが調べてみると

[Feature Request] Project Lombok integration? · Issue #502 · realm/realm-java · GitHub

自分のksな英語力によるとどうやらLombokによる生成とうまく噛みあわせることができていないようです。

そもそもLombokはアノテーションを加えるだけで勝手にコードが生成されてしまうのは謎が多すぎるので少し調べてみました。

結果的にいうとLombokの機能としては

ということのようです。

まあそれだったら他のライブラリと組み合わせるのは難しいですよね...

しかし上記のissueを見てみるとどうやら開発者側もできたらいいねという感じでまだissueもopenしているので

もしかしたら今後対応するかもしれない...!

という淡い希望を抱いていきたいと思います。

参考