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が呼ばれるので特に問題はない。