在纯 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

中的“用另一个包实现覆盖”