跳到主要内容

基础知识

如果你有一些Java基础的话,使用Groovy会非常容易

变量定义

var/def 定义变量(自动推断类型)

var test = 114
def test2 = "Hello"

final 定义常量(自动推断类型)

final test = 114
//test = 114514 -> 不可修改

<Type> 定义指定类型变量(类似Java)

String str = "Hello Groovy"

函数定义

其实函数也是一种变量

使用关键字def定义函数:

def test() {
// 你的代码
}

指定返回值类型定义函数(类似Java):

String calc(String input){
// 你的代码
}

static void doSomething(){//static关键字表示这是静态方法
// 你的代码
}

闭包定义:

def sum={
a,b -> return a+b
}

方法引用:

def str = "Hello, World!"
def toUpperCaseMethod = str.&toUpperCase
println(toUpperCaseMethod()) //输出:HELLO, WORLD!

全局变量

使用@Field注解修改变量的作用域

import groovy.transform.Field

@Field static String value = "abc"
@Field static def value2 = "test"
static void enable(){
Bukkit.getLogger().info(value)
Bukkit.getLogger().info(value2)
}

也可以类似于Java,通过在外面套一层class来间接实现:

class TestClass{
static def value = "abc"
def value2 = "test"
}
static void enable(){
Bukkit.getLogger().info(TestClass.value) //static变量可直接通过类访问
def clazz = new TestClass()
Bukkit.getLogger().info(clazz.value2) //成员变量需要通过对象访问
}

重载后,后台显示:

[00:38:23 INFO]: abc
[00:38:23 INFO]: test

简单来说,只要你不重载插件或关服,这个变量就一直存在,你可以随便在哪里调用它。

新建对象

def map = new HashMap()  //使用def定义

HashMap map2 = new HashMap() //不指定HashMap内数据类型

HashMap<String, String> map2 = new HashMap() //指定HashMap内数据类型,同Java

循环

for循环(同Java):

for(int i=0;i<10;i++){
// 你的代码
}

增强for循环:

def numbers = [1, 2, 3, 4, 5]
for (num in numbers) {
println(num)
}
for (int num : numbers) {//同Java
println(num)
}

forEach循环:

def numbers = [1, 2, 3, 4, 5]
numbers.each { num ->
println(num)
}
numbers.forEach(num -> println(num)) //同Java