Имеет ли смысл выбрасывать исключение при назначении свойства JS в Rhino? - PullRequest
0 голосов
/ 19 июля 2010

Я наткнулся на схему, которая переопределяет [Scriptable.put] [1] в подклассе ScriptableObject , чтобы выполнить некоторое преобразование. Если преобразование не выполняется, код выдает исключение. Это означает, что присвоения свойств, такие как следующий код, могут вызвать исключение времени выполнения

    aScriptable.dateOfArrival = aVar;

По умолчанию rhino не позволяет скрипту перехватывать исключение времени выполнения, выдаваемое во время [Scriptable.put] [1]. Поэтому блок catch в следующем коде никогда не запустится:

    try{    
      aScriptable.dateOfArrival = aVar;
    }catch(e){
    //will not run even if above assignment generates an exception. Script will be terminated instead
    }

Переопределение ContextFactory.hasFeature() с помощью следующего кода заставляет работать вышеуказанный блок catch:

    protected boolean hasFeature(Context cx, int featureIndex) {
      if(featureIndex == Context.FEATURE_ENHANCED_JAVA_ACCESS){
        return true;
      }
      return super.hasFeature(cx, featureIndex);
    }

Мой вопрос заключается в том, является ли правильное решение о создании исключения для присваивания свойства, или присвоения свойств никогда не должны вызывать исключения?

[1]: http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/Scriptable.html#put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object)

1 Ответ

1 голос
/ 23 июля 2010

IMO не имеет смысла генерировать исключение по конструкции из метода put, который не может поймать код JS.Я думаю, что сгенерировать исключение при установке свойства - это хорошо, хотя и не так часто.Обратите внимание, что код JS может легко перенастроить свойство (в ECMAScript 5) с помощью специального установщика, который выбрасывает.

С другой стороны, я думаю, было бы весьма удивительно, если бы метод получения свойства выдает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...