我遇到了一个设计,它在的子类中重写了[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)