使用 GWT 编译器从 Java 到 JavaScript

标签 java javascript gwt

我编写了一些 Java 代码,我想将其转换为 JavaScript。 我想知道是否可以使用 GWT 编译器将提到的 Java 代码编译成 JavaScript 代码保留所有方法、变量和参数的名称。 我尝试使用 -draftCompile 关闭代码优化来编译它,但方法名称被破坏了。 如果 GWT 编译器不能做到这一点,其他工具可以吗?

更新

Java 代码将只依赖于 GWT 模拟类,因此 GWT 编译器肯定能够处理它。

更新 2

这个 Java 方法:

public String method()

被翻译成这个 JavaScript 函数:

function com_client_T_$method__Lcom_client_T_2Ljava_lang_String_2()

使用编译器选项:

-style DETAILED
-optimize 0
-draftCompile

所以名字不能保留。但是有没有办法控制它们的变化方式?

澄清

例如,您有一个用 Java(或其他一些简单的数学实用程序)编写的排序算法。 sort() 方法接受一个整数数组。并在排序的数组中返回这些整数。现在说,我同时拥有 Java 和 JavaScript 应用程序。我想用 Java 编写一次这个方法,通过 GWT 编译器运行它,要么保持方法名称不变,要么以可预测的方式更改它,这样我就可以检测到它并知道如何将它改回排序( ).然后我可以将该代码放入我的 JavaScript 应用程序中并使用它。如果 Java 版本更改,我还可以自动重新生成它。从技术上讲,我有一个很好的理由,我在高层次上理解 GWT 的概念,我只是在寻找这一点的答案。

结论

主要问题的答案是。 虽然方法名称可以保留一些,但它的主体是不可用的。其中的方法调用分散在整个生成的文件中,因此,它们不能在本主题的重点所在的 JavaScript 库中使用。

最佳答案

虽然您可以将编译器设置为输出“漂亮”的代码,但我建议您为要从 GWT 项目外部调用的类编写导出函数。我相信 GWT 文档中的某处详细说明了如何执行此操作,但我找不到它,所以这里是我刚刚创建的示例。

class YourClass {
    public YourClass() {
        ...
    }

    public void yourMethod() {
        ...
    }

    public static YourClass create() {
        return new YourClass();
    }

    public final static native void export() /*-{
          $wnd.YourClass = function() {
              this.instance = new @your.package.name.YourClass::create()()
          }

          var _ = $wnd.YourClass.prototype;
          _.yourMethod = function() {this.instance.@your.package.name.YourClass::yourMethod()()}
    }-*/;
}

编辑

具体来说,您的代码将像往常一样被混淆,但由于导出功能,您可以轻松地从外部引用这些函数。您不必用 JavaScript 重写 Java 类中的任何内容。你只用 JavaScript 编写引用,所以你可以这样做:

var myInstance = new YourClass();
myInstance.yourMethod();

当然,您必须从 GWT 应用程序中的某处(很可能是在您的 EntryPoint 中)调用静态导出方法才能完成这项工作。

有关从 JavaScript 引用 Java 方法的更多信息: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields

关于使用 GWT 编译器从 Java 到 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417809/

相关文章:

java - Java 中的同步多线程(Apache HTTPClient)

java - Swing JScrollPane 更新时重置滚动位置

java - 查找数组中的字母

java - 在Java中使用json Schema过滤json实例

javascript - 将数据附加到css类-jQuery字符串操作

java - 如何将谷歌应用程序引擎数据存储中的数据获取到客户端的 Angular js中?

java - gwt 使用 guice - 引导或部署时发生的情况

html - GWT : Sound not playing mobile?

javascript - Angular 如何使用不同 Controller 的范围

javascript - 禁用列排序不适用于多个 angularjs 数据表