簡體   English   中英

使用Luaile和LuaJava調用帶有可變數字參數的Java方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM