gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:56:55 24 4
gpt4 key购买 nike

我有一个像下面这样的类 - 这是库的一部分,我根本无法更改它(如果可以,我会重写它或用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com