代码之家  ›  专栏  ›  技术社区  ›  Tahir Akhtar

在Rhino的JS属性赋值中抛出异常有意义吗?

  •  0
  • Tahir Akhtar  · 技术社区  · 15 年前

    我遇到了一个设计,它在的子类中重写了[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 回复  |  直到 15 年前
        1
  •  1
  •   heycam    15 年前

    在我看来,从 put

    另一方面,我认为如果一个属性getter抛出一个异常,那将是非常令人惊讶的。