RealmのJavaからkotlinへ書き換えたい

投稿者: Anonymous

以下の処理をkotlinで書きたいのですが
ご教授のほどよろしくお願いします。
公式のDocumentを探したのですが見つけられなかったため質問させてください。
やりたいことはrealmの読み書きが発生したときの通知を実装したいです

private Realm realm;
private RealmChangeListener realmListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      realm = Realm.getDefaultInstance();
      realmListener = new RealmChangeListener() {
        @Override
        public void onChange(Realm realm) {
        }};
      realm.addChangeListener(realmListener);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Remove the listener.
        realm.removeChangeListener(realmListener);
        // Close the Realm instance.
        realm.close();
    }
}

解決

Kotlin pluginを入れたAndroid Studioであれば、Code メニューに Convert Java File to Kotlin Fileというのがあるのでこれを使うと自動的にKotlinのコードに変換してくれます。

例えば質問にあるコードを変換すると以下のようになります。Kotlinとしてはベストなコードではないですが、これをスタート地点として、lazyを使ってvarvalに変えていったり !!を排除する方向で修正していくのがいいのではないかと思います。

class MyActivity : Activity() {
    private var realm: Realm? = null
    private var realmListener: RealmChangeListener<Realm>? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        realm = Realm.getDefaultInstance()
        realmListener = RealmChangeListener<Realm> { }
        realm!!.addChangeListener(realmListener)
    }

    override fun onDestroy() {
        super.onDestroy()
        // Remove the listener.
        realm!!.removeChangeListener(realmListener)
        // Close the Realm instance.
        realm!!.close()
    }
}
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *