使用LuaJava从Lua文件调用具有可变数量参数的Java方法
2012-3-6 22:39:0
收藏:0
阅读:105
评论:3
在我们的项目中,我尝试从 Lua 调用一个带有可变参数的 Java 方法。因此,Java 方法的代码如下:
public static void addEvent( String luaFile, String function,
int milliseconds, Object...args )
{
events.add( new TimerEvent( luaFile, function, milliseconds, args ) );
}
我想在 Lua 文件中使用以下语句调用此方法:
mgr:addEvent( "luaFile.lua", "doSomething", 3000, var )
但是使用 Luajava 时,我总是会遇到错误:
PANIC: unprotected error in call to Lua API (Invalid method call. No such method.)
即使删除“var”参数或添加更多参数也不起作用。
因此,也许你们中的任何人都曾在 Lua 文件中使用具有可变参数的 Java 方法,并可以给我一些提示,我该如何解决这个问题。我不想在 Lua 文件中使用太多代码行来创建 ArrayList 并添加参数并将此 ArrayList 传递给 Java 方法。因此,也许还有一种简单的方法可以创建一个数组,我可以将其作为数组传递给 Java。因此,解决方案不一定要使用 vargs,但我认为这是一种简单的方法。
提前感谢任何帮助
原文链接 https://stackoverflow.com/questions/9593062
点赞
stackoverflow用户221509
很遗憾,LuaJava 目前不支持 Java 数组。它不允许构造新的 Java 数组,也不支持数组操作(包括获取和设置值)。因此它无法支持 Object... args
语法。
您可以通过使用专门的方法来解决这个问题。这些方法分别支持 0、1、2、3 个参数(我认为您不需要超过 3 个)。然后您可以添加一个 Lua 可变参数函数来调用适当的函数。下面是一个 3 个参数调用的示例:
public static void addEvent3( String luaFile, String function,
int milliseconds, Object arg1, Object arg2, Object arg3 )
{
events.add(new TimerEvent(luaFile, function, milliseconds, new Object[] {arg1, arg2, arg3}));
}
2012-03-08 19:43:44
stackoverflow用户16418916
public static Object[] ConvertTableToArray(LuaTable table, Class toClass) {
var array = Array.newInstance(toClass, table.length());
for (int i = 0; i < table.length(); i++) {
var v = table.get(i + 1).touserdata(toClass);
Array.set(array, i, v);
}
return (Object[]) array;
}
在 Lua 中调用此函数,请确保 LuaTable 中仅包含 toClass 类型的对象。
示例:
JavaClass:ConvertTableToArray({obj1,obj2,obj3},obj1:getClass())
2021-07-10 07:18:51
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
一个可变参数(例如
Object... args
)实际上是Object[]
类型。Lua(可能)不能识别可变参数并动态创建数组,可以尝试使用以下代码:
mgr:addEvent( "luaFile.lua", "doSomething", 3000, {var})