我正在尝试使用JNLua的javavm module来连接和扩展Java库(JAR)。到目前为止,我对在Lua和Java-seemless之间来回传递Java对象是多么容易感到非常满意。
现在我有兴趣在LUA中扩展这些Java对象。在我天真的方法中,我将Java对象包装在Lua类中,目的是扩展该对象API,即向其添加方法。但我不想在包装器中重新创建所有Java对象方法。看起来我应该能够继承Java对象,这样当我的包装器中缺少一个方法时,Lua将在Java对象中查找它,它是包装类的成员。我已经尝试调整Inheritance中显示的示例,但这是一个稍微棘手的设置,因为我正在处理Java对象。想法?
答案 0 :(得分:0)
我在下面的SO问题中找到了答案
Add members dynamically to a class using Lua + SWIG
下面的代码可以让我扩展(添加方法)一个Java对象。
function Model:new (model)
o = {}
WrapObject(Model, o, model)
self.__index = self
self.model = model or nil
return o
end
function WrapObject(class, object, userData)
local wrapper_metatable = {}
function wrapper_metatable.__index(self, key)
local ret = rawget(class, key)
if(not ret) then
ret = userData[key]
if(type(ret) == "function") then
return function(self, ...)
return ret(userData, ...)
end
else
return ret
end
else
return ret
end
end
setmetatable(object, wrapper_metatable)
return object
end
function Model:Test ()
name = self:GetFullName()
fileName = self:GetFileName()
ret = name .. fileName
print("It's a test!!")
return ret
end