Java 类交互
javascript
const core = require('cheese-js');lua
local core = require('cheese-lua')静态方法 / 静态变量
javascript
// @ts-ignore
importClass(java.lang.System);
// @ts-ignore
importClass(java.lang.Integer);
console.log("currentTimeMillis =", System.currentTimeMillis()); // 静态方法
console.log("Integer.MAX_VALUE =", Integer.MAX_VALUE); // 静态变量
System.out.println("hello from Java System.out"); // 静态变量 + 实例方法lua
local System = java.import('java.lang.System')
local Integer = java.import('java.lang.Integer')
print("currentTimeMillis =", System:currentTimeMillis()) -- 静态方法
print("Integer.MAX_VALUE =", Integer.MAX_VALUE) -- 静态变量
System.out:println("hello from Java System.out") -- 静态变量 + 实例方法实例方法 / 实例变量
javascript
// @ts-ignore
importClass(java.lang.StringBuilder);
// @ts-ignore
importClass(android.graphics.Point);
const sb = new StringBuilder("A");
sb.append("-B").append("-C");
console.log("StringBuilder =", sb.toString()); // 实例方法
const p = new Point(10, 20);
console.log("before:", p.x, p.y); // 实例变量读取
p.x = 99; // 实例变量写入
console.log("after:", p.x, p.y);lua
local StringBuilder = java.import('java.lang.StringBuilder')
local Point = java.import('android.graphics.Point')
local sb = StringBuilder("A")
sb:append("-B")
sb:append("-C")
print("StringBuilder =", sb:toString()) -- 实例方法
local p = Point(10, 20)
print("before:", p.x, p.y) -- 实例变量读取
p.x = 99 -- 实例变量写入
print("after:", p.x, p.y)Java 多线程(Runnable 示例)
下面示例演示:创建 Runnable 并交给 Thread 执行。
javascript
// @ts-ignore
importClass(java.lang.Thread);
// @ts-ignore
importClass(java.lang.Runnable);
// @ts-ignore
importClass(java.lang.System);
const task = new Runnable({
run: function () {
try {
System.out.println("worker start");
Thread.sleep(300);
System.out.println("worker end");
} catch (e) {
console.error(e);
}
}
});
const t = new Thread(task);
t.start();
t.join();lua
local Thread = java.import('java.lang.Thread')
local Runnable = java.import('java.lang.Runnable')
local System = java.import('java.lang.System')
local task = java.proxy(Runnable, {
run = function()
System.out:println("worker start")
Thread:sleep(300)
System.out:println("worker end")
end
})
local t = Thread(task)
t:start()
t:join()注意事项
- 不是所有 Java 类都有可直接读写的公有实例变量;很多类只开放 getter/setter。
- JS 与 Lua 的桥接层会自动做一部分类型转换,但复杂对象建议先打印类型再操作。