从带有LuaJava的Luafile调用带有可变数量参数的Java方法

从带有LuaJava的Luafile调用带有可变数量参数的Java方法,java,lua,luajava,Java,Lua,Luajava,在我们的项目中,我尝试从lua调用一个java方法,该方法具有可变数量的参数。因此,java方法的代码如下所示: public static void addEvent( String luaFile, String function, int milliseconds, Object...args ) { events.add( new TimerEvent( luaFile, function, milliseconds,

在我们的项目中,我尝试从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。 所以解决方案不一定要使用VARG,但我认为这是一种简单的方法

感谢您事先提供的帮助

varargs参数(例如
对象…args
)的类型确实是
对象[]

LUA(可能)无法识别变量并动态创建数组,因此请尝试以下方法:

mgr:addEvent( "luaFile.lua", "doSomething", 3000, {var})

不幸的是,LuaJava目前不支持Java阵列。它不允许构建新的Java数组,也不支持数组操作(获取和设置值)。因此,它无法支持
对象。。。args
语法

您可以通过使用接受0、1、2、3个参数的专门方法来解决这个问题(我认为您需要的参数不会超过3个)。然后添加一个luavararg函数,该函数调用适当的函数。三参数调用的一个示例:

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}));
}

我不知道lua,但是Java varargs方法也可以用数组调用,例如
String.format
可以用
String.format(formatString,新对象[]{arg1,arg2,arg3}调用
。这有用吗?嗯,是的,我试过了。但是LuaJava似乎使用表而不是数组。因此您的解决方案不起作用,因为{var}是一种对象。所以我要寻找的是一种使用Lua创建数组的解决方案,Lua在Java中也用作数组。谢谢你的回答。不,我知道,我必须找到解决方法。你建议的可能是最好的方法,我会这样做。