如何在Lua中使用Java定义的实例方法?

时间:2014-08-09 20:57:38

标签: java lua luaj

我知道可以在Lua中使用Java定义的静态方法,因为http://luaj.org/luaj/README.html上的“Java函数库”一节。

但是我很难找到如何使用相同的实例方法,我在这里有一个缩短的例子:

private static class CallbackStore {        
    public void test(final String test) {

    }
}

(我知道我也可以在这里使用静态方法,但现实生活中不可能这样做)

我正在使用以下Lua代码:

-- Always name this function "initCallbacks"

function initCallbacks(callbackStore)
    callbackStore.test("test")
end

哪个不起作用,因为它期待用户数据回来,但我给它一个字符串。

我将Lua代码称为:

globals.load(new StringReader(codeTextArea.getText()), "interopTest").call();
CallbackStore callbackStore = new CallbackStore();
LuaValue initCallbacks = globals.get("initCallbacks");
initCallbacks.invoke(CoerceJavaToLua.coerce(callbackStore));

codeTextArea.getText()

返回Lua代码

我的问题的最后一行是,如何使用test作为实例方法运行我的代码?

1 个答案:

答案 0 :(得分:2)

当访问成员函数时(通常在Lua对象中,而不仅仅是luaj),你必须手动提供this参数作为第一个参数,如下所示:

callbackStore.test(callbackStore,"test")

或者,你可以使用速记符号来表示同样的事情:

callbackStore:test("test")