java - 当我需要使用带参数的构造函数时,如何使用 Rhino 子类化(扩展)Java 类?

标签 java javascript rhino

我有一个像下面这样的类 - 这是库的一部分,我根本无法更改它(如果可以,我会重写它或用 Java 将其子类化)

public class FirstClass
{
   public FirstClass(SecondClass arg)
   {
      ...
   }
   public ThirdClass aMethod()
   {
      ...
   }
   ...
}

我想使用 Rhino 从该对象创建一个 Javascript 对象(所以请不要评论 JavaScript 与 Java 不同,我知道这一点)但要覆盖方法“aMethod”。

所以在 Java 中,我会这样做......

public class MySpecialFirstClass extends FirstClass
{
   public FirstClass(SecondClass arg)
   {
      super(arg);
   }
   public ThirdClass aMethod()
   {
      ThirdClass toReturn = super.aMethod();
      //My implementation goes here.
      return toReturn;
   }
   ...
}

但我似乎不能用 Javascript 来做。到目前为止我尝试过的事情......

function js_FirstClass(arg)
{
   var temp = JavaAdaptor(FirstClass, 
      {
         '<init>': FirstClass,
         aMethod: function()
         {
            var toReturn = super.aMethod();
            //Do stuff
            return toReturn;
         }
      });
   return temp;
}

我也试过...

var myClass = new FirstClass(secondClass);
myClass.aMethodOld = myClass.aMethod;
myClass.aMethod = function()
{
   var toReturn = aMethodOld();
   //Do stuff
   return toReturn;
}

还有什么建议吗?

最佳答案

尝试原型(prototype)方法:

function newFirstClass(arg) {
    // Create hidden instance
    var inst = new FirstClass(arg);
    return {
        aMethod: function() {
            var result = inst.aMethod();
            // ... do stuff
            return result;
        }
        // forward every other call directly to inst
        otherMethod: function() {
            return inst.otherMethod();
        }
        // etc...
    }
}

所以我们的想法是通过提供相同的方法(您需要手动注册每个方法)并将调用传递给隐藏的实例来创建一个行为类似于 FirstClass 实例的 JavaScript 对象 安装

不适用于 instanceof 但如果您只需要 Duck typing 则很有用.

关于java - 当我需要使用带参数的构造函数时,如何使用 Rhino 子类化(扩展)Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822777/

相关文章:

java - 打包应用程序时不使用 Trustmanager

java - Spark 应用程序在运行 flatMap 函数后仅使用 1 个执行器

javascript - 使用 Javascript 随机图像生成器获取图像路径的 404 错误

java - 如何将 xml 节点(作为字符串)附加到现有的 XML 元素节点(仅使用 java 内置函数)?

javascript - Rhino 是否可以支持 document.all() ?

java - 将字符串数组转换为int数组android

java - JTabbedPane:选项卡位置设置为 LEFT,但图标未对齐

javascript - 哪个更好?为什么? RaphaelJS 还是 HTML5 Canvas?

javascript - 是否可以在不删除该行的情况下淡出文本?

java - Htmlunit ScriptException "console"未定义