[英]How can I subclass (extend) a Java class using Rhino when I need to use a constructor that takes an argument?
我有一個類似以下的類-這是一個庫的一部分,我根本無法更改(如果可以的話,我會重寫它或用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;
}
...
}
但是我似乎無法用Java語言做到這一點。 到目前為止我嘗試過的事情...
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;
}
還有其他建議嗎?
嘗試原型方法:
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...
}
}
因此,想法是通過提供相同的方法(您需要手動注冊每個方法)並將調用傳遞給隱藏實例inst
來創建一個行為類似於FirstClass
實例的JavaScript對象。
不適用於instanceof
但是如果您只需要輸入Duck則很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.