【问题标题】:Rhino Javascript CompilerRhino Javascript 编译器
【发布时间】:2014-11-13 12:31:58
【问题描述】:

我找到了post 关于使用 Rhino 编译器将 javascript 编译为 java 的内容。我能够让简单的案例工作并调用java中的方法。不过,我有一些问题,希望能在这里得到解答。

  1. 如何使用方法 (setTmpValue,getTmpValue,getType) 和 1 个参数的构造函数将以下代码编译为 TestObject.class?还是不可能?

    function TestObject(params) { this.type= params.type; var tmpValue = 0; this.setTmpValue = function ( val ) { tmpValue = val; }; this.getTmpValue = function () { return tmpValue; }; this.getType = function () { return type }; }

  2. 是否可以引用将从其他js文件编译的类?

    Example: Can I invoke B in A? or do new B() in A? A.js -> A.class B.js -> B.class

  3. 这些已编译类的作用域如何工作?

  4. 除了Here 之外,还有其他文档吗?

提前感谢您的帮助!

【问题讨论】:

  • 您在这里的主要动机是什么?是从Java访问JavaScript对象吗?
  • 主要动机是在javascript和java之间共享逻辑(相同的代码)。

标签: java javascript rhino


【解决方案1】:

有一种更简单的方法,无需编译;看来,鉴于您的问题和 cmets,您的目标是让 JavaScript 对象可以从 Java 中调用。

这是一种方法:

在 Java 方面:

package mypackage;
public abstract class TestObject {
    // insert public abstract methods
    public abstract void doIt();
}

在 JavaScript 方面:

var myInstance = new JavaAdapter(
    Packages.mypackage.TestObject,
    {
        doIt: function() {
            // do something
        }
    }
)

Packages.myapplication.MyApplication.setTestObject(myInstance);

回到 Java 端:

package myapplication;

public class MyApplication {
    private static TestObject test;

    public static void setTestObject(TestObject o) {
        test = o;
    }

    public void doSomething() {
        test.doIt();
    }
}

基本上,JavaScript 对象可以实现 Java 接口或扩展 Java 抽象类。如果它们使自己在 Java 端可用,Java 端可以像 Java 对象一样调用它们。据我所知,这就是你想要的。如果没有,请留下说明,我们将从那里开始。

【讨论】:

  • 如果您想将它们编译为.class 文件并将它们缓存到磁盘,这样就不需要重新编译脚本怎么办?我正在寻找类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2011-06-30
相关资源
最近更新 更多