Как я могу определить статические свойства для ScriptableObject Rhino? - PullRequest
4 голосов
/ 06 августа 2009

Rhino предоставляет интерфейс Scriptable и вспомогательный класс ScriptableObject для реализации объекта javascript, поддерживаемого объектом java.

Когда создается ScriptableObject , его методы с именами начинаются с jsFunction ___ , jsStaticFunction ___ , jsGet ___ , jsSet ___ , jsConstructor автоматически определяются для объекта javascript. Таким образом, вы можете определить функции, статические функции, свойства экземпляра (его аксессорами) и конструктор.

Вопрос в том, как определить статические свойства?

Под статическими свойствами я подразумеваю свойства конструктора, как статические методы являются методами конструктора.

Единственный способ, который я пока вижу, это использовать метод finishInit и определять статические свойства вручную. Но каков правильный путь?

1 Ответ

3 голосов
/ 06 августа 2009

В данный момент у меня на уме нечто подобное:

public class MyObject extends ScriptableObject {

@Override
public String getClassName() {
    return "MyObject";
}

// define static properties
public static void finishInit(Scriptable scope, FunctionObject ctor, Scriptable proto) {
    ctor.defineProperty("PROP_ONE", 1, READONLY);
    ctor.defineProperty("PROP_TWO", 2, READONLY);
    ctor.defineProperty("PROP_THREE", 3, READONLY);
}

Есть ли другие способы? И так ли это правильно?

ВАЖНО: обратите внимание, что конструктор для MyObject еще не определен в области, когда вызывается finishInit . Чтобы определить статические свойства, которые являются экземплярами MyObject , используйте следующий синтаксис:

public static void finishInit(Scriptable scope, FunctionObject ctor, Scriptable proto) {
    Context cx = Context.getCurrentContext();
    Scriptable myObjectInstance = ctor.construct(cx, scope, new Object[] { /* args */ });
    ctor.defineProperty("PROP", myObjectInstance, READONLY);
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...