おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

RubyMotion Android で、Java のクラスをRubyで継承するときの落とし穴

自分用のメモ。RubyMotion 3.3。

前提

  • RubyMotion では Java のクラスを Ruby で継承できる
  • ただ、その際はコンストラクタだけは Java で書かないとダメ

単純にコンストラクタを書く用途以外に、「現行のRubyMotionでうまく動かない箇所をJavaで書いて何とか動かす」用途としても使える(バッドノウハウ)。

落とし穴のレシピ

  • コンストラクタでインスタンス変数に値を格納する
  • 当然、Java の方で変数宣言する

この時、Ruby 側でも attr_accessor などを使ってインスタンス変数にアクセスするメソッドを生やすとハマる。なぜか Java の方で入れた値を Ruby 側で見ることができず、 nil になる。

解決策

attr_accessor を消せば OK