1.在maven中导入LuaJ的依赖
org.luaj
luaj-jse
3.0.1
2.编写一个person.lua模块文件,放置在classpath路径下
-- 模块名(最好和文件名称保持一致)
local person = {}
-- 定义模块变量
person.name = nil
person.info = nil
-- 本地函数say
local function say()
print('this is a local method say')
end
-- 定义模块函数setName
person.setName = function(name)
say()
person.name = name
end
-- 定义模块函数getName
person.getName = function()
return person.name
end
-- 定义模块函数setInfo
person.setInfo = function(table)
person.info = table
end
-- 定义模块函数getInfo
person.getInfo = function()
return person.info
end
-- 定义模块函数getInfoDemo
person.getInfoDemo = function()
return {
{name='张三',age=18},
{name='李四',age=20},
{name='王五',age=22}
}
end
return person
3.编写Java代码测试
public class LuaTest {
public static void main(String[] args) throws Exception {
//lua文件路径
String path = LuaTest.class.getClassLoader().getResource("person.lua").toURI().getPath();
//LuaJ全局对象
Globals globals = JsePlatform.standardGlobals();
//获取模块对象(LuaValue表示lua的数据对象, 可以是number,string,table,function等)
LuaValue personObj = globals.loadfile(path).call();
//获取模块的name属性
LuaValue name = personObj.get(LuaValue.valueOf("name"));
System.out.println(name);
//调用模块的setName方法(设置name)
LuaValue setName = personObj.get(LuaValue.valueOf("setName"));
setName.call(LuaValue.valueOf("忠诚"));
//调用模块的getName方法(取出name)
LuaValue getName = personObj.get(LuaValue.valueOf("getName"));
LuaValue name1 = getName.call();
System.out.println(name1);
//调用模块的getInfoDemo方法(取出Lua对象的demo数据)
LuaValue getInfoDemo = personObj.get(LuaValue.valueOf("getInfoDemo"));
LuaValue demoValue = getInfoDemo.call();
LuaTable demoTable = (LuaTable)CoerceLuaToJava.coerce(demoValue, LuaTable.class);
for (int i = 1; i <= demoTable.length(); i++) {
LuaValue person = demoTable.get(i);
LuaValue name2 = person.get("name");
LuaValue age2 = person.get("age");
System.out.println(name2+":"+age2);
}
//调用模块的setInfo方法(存入Lua对象数据)
LuaValue setInfo = personObj.get(LuaValue.valueOf("setInfo"));
LuaTable luaTable1 = new LuaTable();
luaTable1.set("name","zhangsan");
luaTable1.set("age",10);
LuaTable luaTable2 = new LuaTable();
luaTable2.set("name","lisi");
luaTable2.set("age",11);
LuaTable[] luaTables = {luaTable1,luaTable2};
LuaTable luaTable = LuaTable.listOf(luaTables);
setInfo.call(luaTable);
//调用模块的getInfo方法(取出设置的Lua对象数据)
LuaValue getInfo = personObj.get(LuaValue.valueOf("getInfo"));
LuaValue infoValue = getInfo.call();
LuaTable infoTable = (LuaTable)CoerceLuaToJava.coerce(infoValue,LuaTable.class);
for (int i = 1; i <= infoTable.length(); i++) {
LuaValue person = infoTable.get(i);
LuaValue name3 = person.get("name");
LuaValue age3 = person.get("age");
System.out.println(name3+":"+age3);
}
}
}
4.自定义Lua对象JavaBean转换工具类
使用Java存取Lua对象比较繁琐,可以自定义一个工具类来实现lua对象的存取,在此不再描述,感谢观看!