我写了一些 Java 代码,想将其转换为 JavaScript。
我想知道是否可以使用GWT编译器将提到的Java代码编译为JavaScript代码保留所有名字方法、变量和参数。
我尝试使用 -draftCompile 关闭代码优化来编译它,但方法名称被破坏。
如果 GWT 编译器不能做到这一点,其他工具可以吗?
Update
Java 代码仅依赖于 GWT 模拟类,因此 GWT 编译器肯定能够处理它。
Update 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 的概念,我只是在寻找这一点的答案。
结论
主要问题的答案是NO。
虽然方法名称可以在一定程度上保留,但其主体不可用。其中的方法调用分散在生成的文件中,因此它们不能在 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.ins[email protected] /cdn-cgi/l/email-protection::yourMethod()()}
}-*/;
}
EDIT
详细地说,您的代码将像平常一样被混淆,但由于导出功能,您可以轻松地从外部引用这些函数。你don't必须用 JavaScript 重写 Java 类中的任何内容。您只需在 JavaScript 中编写引用,因此可以执行以下操作:
var myInstance = new YourClass();
myInstance.yourMethod();
当然,您必须从 GWT 应用程序中的某个位置(最有可能在您的 EntryPoint 中)调用静态导出方法才能完成此操作。
有关从 JavaScript 引用 Java 方法的更多信息:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)