public static int AddTwoNumbers(final int number1, final int number2) {
return number1 + number2;
}
复制代码
Lua代码
local args = {2, 3}
local sig = "(II)I"
local ok, ret = luaj.callStaticMethod(className, "AddTwoNumbers", args, sig)
if not ok then
print("luaj error:", ret)
else
print("ret:", ret)
end
复制代码
错误代码定义如下:
错误代码 描述
-1 不支持的参数类型或返回值类型
-2 无效的签名
-3 没有找到指定的方法
-4 Java 方法执行时抛出了异常
-5 Java 虚拟机出错
-6 Java 虚拟机出错
复制代码
六、将 Lua function 作为参数传递给 Java 方法
Lua 虚拟机中,Lua function 以值的形式保存。但这个值无法直接给 Java 用,所以 luaj 做了一个 Lua function 引用表。当一个 Lua function 传递给 Java 时,这个 function 对应的值会被存在引用表中,并获得一个唯一的引用 ID (整数)。Java 代码拿到这个引用 ID 后,就可以很方便的调用该 Lua function 了。
所以Java 方法里接收 Lua function 的参数必须定义为 int 类型,示例:
public static int getNum(int n) {
return n;
}
local function callback(result)
end
local className = "com/qeeplay/frameworks/CheShi"
local method = 'getDisplayWidth'
local args = {
callback
}
local sig = "(I)I"
local _, screenwidth = luaj.callStaticMethod(className, method, args,sig)