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
})