【Groovy快速上手 ONLY ONE】Groovy与Java的核心差异

最近在使用的平台上写脚本的语言是Groovy,所以也学习一下,作为 Java 开发者,Groovy 对我们来说会非常友好,而且它的语法更简洁且支持动态类型,所以其实了解下Java和Groovy的差异点就可以快速上手了,以下是 Groovy 与 Java 不同的常用语法和核心差异点,

1 明显的语法差异

1. 变量声明(动态类型)

Groovy 支持动态类型,用 def 声明变量(类型自动推断):def name = "Groovy" // 自动推断为 String

def num = 42 // 自动推断为 Integer

也可以显式声明类型(类似 Java):String name = "Groovy"

2. 分号可选

分号 ; 在 Groovy 中是可选的(除非一行写多条语句):println("Hello, Groovy") // 不需要分号

3. 方法调用括号可选

当方法参数明确时,括号 () 可以省略:println "Hello, Groovy" // 等同于 println("Hello, Groovy")

4. 字符串:单引号 vs 双引号

单引号:普通字符串(类似 Java 的 String):def s1 = 'Hello'

双引号:支持插值(GString):def name = "Groovy"

def s2 = "Hello, $name!" // 输出 "Hello, Groovy!"

5. 集合的简化语法

List(默认实现是 ArrayList):def list = [1, 2, 3] // 创建 List

list << 4 // 添加元素

println list[0] // 访问元素

Map(默认实现是 LinkedHashMap):def map = [name: "Groovy", age: 20] // 键默认是字符串,无需引号

println map.name // 访问键值(类似属性)

2 核心概念差异

1. 闭包(Closure)

Groovy 的闭包类似 Java 的 Lambda,但更强大:def closure = { a, b -> a + b }

println closure(1, 2) // 输出 3

隐式参数 it(当闭包只有一个参数时):def greet = { "Hello, $it!" }

println greet("Groovy") // 输出 "Hello, Groovy!"

2. 安全导航操作符(?.)

避免空指针异常:def user = null

println user?.name // 输出 null,而不是抛异常

3. 运算符重载

Groovy 允许运算符重载(例如 + 可自定义):class Box {

int value

Box plus(Box other) { new Box(value: this.value + other.value) }

}

def b1 = new Box(value: 1)

def b2 = new Box(value: 2)

println (b1 + b2).value // 输出 3

4. Groovy Truth(真值判断)

Groovy 中以下情况为 false:

空集合/字符串/Mapnull数值 0false

示例:if ([]) { println "不执行" } else { println "空列表为 false" }

3 常用功能增强

1. 集合操作

强大的链式操作:def numbers = [1, 2, 3, 4]

def doubled = numbers.collect { it * 2 } // [2, 4, 6, 8]

def even = numbers.findAll { it % 2 == 0 } // [2, 4]

2. Elvis 操作符(?:)

简化三元表达式:def name = user.name ?: "Unknown" // 如果 user.name 为 null,返回 "Unknown"

3. Switch 支持更多类型

可以匹配列表、范围、类型等:def x = 5

switch (x) {

case 1..10: println "在1到10之间"; break

case [11, 12]: println "是11或12"; break

case String: println "是字符串"; break

}

4 常用的集合操作

Groovy提供了丰富的集合操作,以下是一些常用的集合操作及其示例:

1. each 方法

each 方法用于遍历集合中的每个元素,并对每个元素执行指定的操作。

def list = [1, 2, 3, 4, 5]

list.each { element ->

println element

}

输出:

1

2

3

4

5

2. collect 方法

collect 方法用于对集合中的每个元素进行转换,并返回一个新的集合。

def list = [1, 2, 3, 4, 5]

def squaredList = list.collect { element ->

element * 2

}

println squaredList

输出:

[2, 4, 6, 8, 10]

3. find 方法

find 方法用于查找集合中满足特定条件的第一个元素。

def list = [1, 2, 3, 4, 5]

def evenNumber = list.find { element ->

element % 2 == 0

}

println evenNumber

输出:

2

4. findAll 方法

findAll 方法用于查找集合中所有满足特定条件的元素,并返回一个新的集合。

def list = [1, 2, 3, 4, 5]

def evenNumbers = list.findAll { element ->

element % 2 == 0

}

println evenNumbers

输出:

[2, 4]

5. any 方法

any 方法用于检查集合中是否存在至少一个满足特定条件的元素。

def list = [1, 2, 3, 4, 5]

def hasEvenNumber = list.any { element ->

element % 2 == 0

}

println hasEvenNumber

输出:

true

6. every 方法

every 方法用于检查集合中的所有元素是否都满足特定条件。

def list = [2, 4, 6, 8]

def allEvenNumbers = list.every { element ->

element % 2 == 0

}

println allEvenNumbers

输出:

true

5 Java 开发者易错点

1. == 与 equals()

Groovy 中 == 相当于 equals(),如果要比较引用用 is():def s1 = new String("Groovy")

def s2 = new String("Groovy")

println s1 == s2 // true(内容相等)

println s1.is(s2) // false(引用不同)

2. 数组定义

Groovy 中定义数组需明确类型或使用 as 关键字:def arr1 = [1, 2, 3] as int[] // 正确

int[] arr2 = [1, 2, 3] // 正确

3. 默认导入的包

Groovy 自动导入了常用包(如 java.util.*, groovy.util.* 等),注意可能的命名冲突。

6 Groovy的优势

脚本化执行:Groovy 可以直接运行脚本,无需 public static void main。利用 Groovy Console:快速测试代码片段。逐步引入闭包和 DSL:Groovy 适合编写领域特定语言(DSL)。

如何设置淘宝店铺网店客服?作者:小果 时间:2025-07-10 阅读:3624
【摄影器材】徕卡、哈苏、禄来谁的逼格更高?
Copyright © 2022 2018世界杯时间_世界杯百大球星 - gonhee.com All Rights Reserved.