Java转AndroLua涉及关键字、类型、变量、函数、运算符、if、for、while、switch等转换,需注意Lua语法差异,如无new关键字、无类型声明、函数无括号等。
AI 摘要
Java和Lua的区别
转 Lua 前必须要知道的是 Java 和 Lua 的区别在哪里
区别如下:
1、Java 中有很多 Java 才有的关键字和类型,Lua 则只有 Lua 自己的关键字。不过 Lua 和 Java 也有共同的关键字。
2、Java 中声明数组和实例化对象需要 new
关键字,而 Lua 没有 new
和不需要自己写类型。
3、Java 函数体采用的括号包起来,而 Lua 则是用 end
结束函数并不用花括号。
Java 和 Lua 中常用的关键字
Java
public, private, protected, final, static, default, void, synchronized, abstract, interface
Lua
local
Java 常用的类型
int, float, double, long, short, char, boolean, byte
注意的是 String
实际上是一个对象并不是类型。
变量转换
Java
public static int a = 0;
Lua
local a = 0
Java
private static int a = 0;
Lua
local a = 0
Java
protected final String a = 0;
Lua
local a = 0
看起来很复杂,这里有个记忆口诀
如:protected final String a = 0;
上面这个变量名为 a
可以直接把变量名左边的全部去除,保留右边:
a = 0
Java
final String asd = 0;
Lua
asd = 0
函数转换
Java 中函数的声明结构是:
修饰符 返回类型 方法名(参数类型 a ,xxx){
}
转 Lua 也是非常简单的, 比如下面这个:
Java
public final void a(A a){
}
转 Lua:
Lua
function a()
end
再比如:
Java
public static String a(A a){
}
转 Lua:
Lua
function a()
end
记忆口诀
1、把函数名前面的所有删除,加上 function
2、参数类型删除
3、花括号删除,加上 end
Java
public static String a(A asd){
}
函数名是 a
,删除前面的,加上 function
就是:
Lua
function a
括号中去除参数类型就是 asd
去除花括号,加 end
就是:
Lua
function a(a)
end
运算符的转换
Java 和 Lua 运算符对比
运算符类型 | Java | Lua |
---|---|---|
算术运算符 | a = a + 1 |
a = a + 1 |
a = a - 1 |
a = a - 1 |
|
a = a * 1 |
a = a * 1 |
|
a = a / 1 |
a = a / 1 |
|
a = a % 1 |
a = a % 1 |
|
a++ |
a = a + 1 |
|
a-- |
a = a - 1 |
|
关系运算符 | == |
== |
!= |
~= |
|
< |
< |
|
= |
= |
|
<= |
<= |
|
位运算符 | & |
& |
~ |
~ |
|
<< |
<< |
|
逻辑运算符 | && |
and |
` | ||
! |
not |
|
赋值运算符 | a = 1 |
a = 1 |
a += 2 |
a = a + 2 |
|
a -= 2 |
a = a - 2 |
|
a *= 2 |
a = a * 2 |
|
a /= 2 |
a = a / 2 |
|
a %= 2 |
a = a % 2 |
|
a <<= 2 |
a = a << 2 |
|
a >>= 2 |
a = a >> 2 |
|
a &= 2 |
a = a & 2 |
|
a ^= 2 |
a = a ^ 2 |
|
三目运算符 | a = b ? 1 : 2 |
if b then a = 1 else a = 2 end |
if 的转换
Java
if (a == b && a == c) { }
else if (a != c && c == 3) { }
else { }
Lua
if a == b or a ~= c then
elseif a ~= c and c == 3 then
else
end
记忆口诀
1、去除花括号
2、逻辑运算符按照上面表格更改
3、在条件后面加上 then
4、最后加上 end
for 循环的转换
Java
for (int i = 0; i < 10; i++) { }
Lua
for i = 0, 10, 1 do end
Java
int i = 0; for (; i < 10; i++) { }
Lua
for i = 0, 9, 1 do end
Java
int i = 10; for (; i >= 10; i--) { }
Lua
for i = 0, 10, -1 do end
Java
int i = 0; for (; i > 10; i = i - 2) { }
Lua
for i = 0, 10, -2 do end
Java
int i = 0; for (; i > 10; i = i + 2) { }
Lua
for i = 0, 10, 2 do end
Java
for (;;) { }
Lua
while true do end
Java
int[] as = new int[]{1, 2, 3, 4, 5, 6};
for (int a : as) { }
Lua
as = {1, 2, 3, 4, 5, 6}
for i = 1, #as - 1 do end
while 循环
Java
while (true) { }
Lua
while true do
end
Java
while (a == 0) { }
Lua
while a == 0 do
end
switch 的转换
Java
int a = 10;
switch (a) {
case 10:
break; // 可选
case 9:
break; // 可选
default: // 可选
}
Lua
a = 10
switch(a)
case 10
case 9
default
end
实例化对象
Java
String a = new String("123");
Lua
a = String("123")
数组的转换
Java
int[] is = new int[]{1, 2, 3};
Lua
is = {1, 2, 3}
Java
String[] is = new String[]{"1", "2", "3"};
Lua
is = {"1", "2", "3"}
接口的转换
Java
Button btn = new Button(this);
btn.setOnclickListener(new View.OnClickListener() {
@Override
protected void onclick(View v) { } });
Lua
btn = Button(this)
btn.setOnclickListener({
onclick = function(v)
end
})