Я наткнулся на схему, которая переопределяет [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)