在纯 Java 环境中如何处理 JSNI 方法?
How are JSNI methods handled in a pure Java environment?
我使用以下 GWT JSNI code,它应该用于服务器和客户端使用的共享包中:
public static native void alert(String msg) /*-{
$wnd.alert(msg);
}-*/;
public void doSomething() {
alert("test");
}
当编译器编译成纯Java时,编译器对服务器上的这段代码做了什么?有什么方法可以提供纯 Java 版本的代码来替代 JSNI 部分吗?
从 JVM 的角度来看,它们是 native
methods。
/*-{ … }-*/
是特定于 GWT 的语法,从 Java 编译器的角度来看,它只是一条注释。
因此,如果在 JVM 中调用,它将失败并显示 UnsatisfiedLinkError
。
如果你想为 GWT 和 JVM 提供特定的实现,如果 JVM 特定的代码可以转换为 GWT(你可以尝试用 @GwtIncompatible
注释它,请使用 GWT.isScript()
如果 GWT 抱怨),或者你可以使用 super source;请参阅 http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml
中的“用另一个包实现覆盖”
我使用以下 GWT JSNI code,它应该用于服务器和客户端使用的共享包中:
public static native void alert(String msg) /*-{
$wnd.alert(msg);
}-*/;
public void doSomething() {
alert("test");
}
当编译器编译成纯Java时,编译器对服务器上的这段代码做了什么?有什么方法可以提供纯 Java 版本的代码来替代 JSNI 部分吗?
从 JVM 的角度来看,它们是 native
methods。
/*-{ … }-*/
是特定于 GWT 的语法,从 Java 编译器的角度来看,它只是一条注释。
因此,如果在 JVM 中调用,它将失败并显示 UnsatisfiedLinkError
。
如果你想为 GWT 和 JVM 提供特定的实现,如果 JVM 特定的代码可以转换为 GWT(你可以尝试用 @GwtIncompatible
注释它,请使用 GWT.isScript()
如果 GWT 抱怨),或者你可以使用 super source;请参阅 http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml