Gwt 为什么可以';t JavascriptObject';是否检测到运行时空指针?

Gwt 为什么可以';t JavascriptObject';是否检测到运行时空指针?,gwt,nullpointerexception,javascript-objects,Gwt,Nullpointerexception,Javascript Objects,经过一些调试后,我发现“com.google.gwt.event.shared.umblerralException:一个或多个 捕获更多异常,请参阅umbralleException#getCauses'中的全集,当调用方法[nsIDOMEventListener::handleEvent](在web模型中)时,它是由运行时空指针引起的。问题是为什么在主机模型下没有抛出这种运行时空指针异常。实际上,blow代码不会抛出任何异常,甚至在我的笔记本电脑(gwt 2.4+java 7 64位+Ubu

经过一些调试后,我发现“com.google.gwt.event.shared.umblerralException:一个或多个 捕获更多异常,请参阅umbralleException#getCauses'中的全集,当调用方法[nsIDOMEventListener::handleEvent](在web模型中)时,它是由运行时空指针引起的。问题是为什么在主机模型下没有抛出这种运行时空指针异常。实际上,blow代码不会抛出任何异常,甚至在我的笔记本电脑(gwt 2.4+java 7 64位+Ubuntu12.04 64位+eclipse 3.7)中也不会弹出警报。任何人都知道如何在JavascriptObject指针出现运行时null时强制执行eclipse抛出异常

public class GWTTest implements EntryPoint
{
    public static class JsObj extends JavaScriptObject
    {
         protected JsObj()
         {
         }

         public final native void setValue(String Value)/*-{
                this.Value=Value;
                alert(Value);
         }-*/;
    }

    public void onModuleLoad()
    {
         JsObj jsObj = null;
         jsObj.setValue("val");
    }
}

编译器执行了大量优化以将GWT/Java转换为Javascript

  • 类型和方法是最终的-这允许后面的步骤理解哪些方法需要正常调度,哪些方法可以是静态的,只需调用单个实现
  • 方法尽可能是静态的,这允许方法内联
  • 在可能和合理的情况下,方法是内联的
也就是说。。。当我编译您的示例时,onModuleLoad()的主体优化如下:

null.nullMethod();
这是GWT编译器说“这永远不会工作”的方式——它注意到值始终为null,因此无法对其调用该方法。但是在Dev模式下,显然null对象在JavaScript中左指
窗口
对象。该文件在GWT项目中存档

如果您需要确保没有对null执行操作,请在调用该方法之前测试null-如果在像您这样的测试中,该值始终为null,那么它将得到优化。运行时异常无论如何都不应该用于控制代码,因此您永远不应该依赖NullPointerException在代码中执行任何操作