Android + Rhino その4
PropertyのSetter/Getterについて
setterとgetterはそれが定義されているbase classを指定して定義しないとダメ。
public class A extends ScriptableObject {
private int p;
public A() {
defineProperty(“p”, getClass(), PERMANENT);
}
public int getP() {
return p;
}
public void setP(int p) {
this.p = p;
}
…
}
public class B extends A {
…
}
この場合class AのJavaScript上のオブジェクトaに対してa.pなんかでアクセスする事はできるんですが、
このクラスを継承したBのJavaScript上のオブジェクトbに対してb.pではアクセスする事ができずnullが戻る。
問題はdefinePropertyのsetter/getterを探すclassオブジェクトを指定するgetClass()。
ここがclass Bの作成時には当然B.classが戻るわけですが、B.classには当該setter/getterは定義されていないため
アクセス出来ない、、、って話みたい。多分(ちゃんと調べてないんだけど)。
なので、とりあえずgetClass()をA.classに変更すると問題無く動く。
この場合でもBでgetter/setterをOverrideした時にはちゃんとB側のmethodが呼ばれるので特に問題はない。