[英]Call a Java-method with a variable number arguments from a Luafile with LuaJava
在我們的項目中,我嘗試從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”-argument或添加更多參數也不起作用。
所以也許你們中的任何人曾經在Lua文件中使用過帶有變量參數的java方法,並且可以給我一個提示,告訴我如何解決這個問題。 我只是不想在Lua文件中使用太多代碼行,因為我需要創建一個ArrayList並添加參數並將此ArrayList傳遞給Java方法。 所以也許有一種簡單的方法來創建一個我可以作為Array傳遞給Java的數組。 因此,解決方案不一定必須使用vargs,但我認為這將是一種簡單的方法。
在此先感謝您的幫助
varargs參數(例如Object... args
)實際上是Object[]
類型。
LUA(可能)無法識別varargs並動態創建數組,所以試試這個:
mgr:addEvent( "luaFile.lua", "doSomething", 3000, {var})
不幸的是,LuaJava目前不支持Java數組。 它不允許構建新的Java數組,也不支持使用數組操作(獲取和設置值)。 因此它無法支持Object... args
語法。
你可以通過使用0,1,2,3個參數的專門方法解決這個問題(我認為你不需要超過3個)。 然后你會添加一個調用相應函數的Lua vararg函數。 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}));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.