Groovy 作为一种运行在 JVM 上的动态语言,与 Java 有着天然的兼容性,调用 Java 代码是其核心优势之一,这种互操作性使得开发者可以在 Groovy 项目中无缝复用 Java 生态系统的丰富资源,同时享受 Groovy 带来的语法简洁和动态特性,以下是 Groovy 调用 Java 的几种常见方式及其具体实现。

直接调用 Java 类与对象
Groovy 可以直接导入和使用任何 Java 类,无需额外配置,调用 Java 标准库中的 ArrayList 和 String 类时,语法与 Java 几乎一致,但 Groovy 的动态类型特性允许省略类型声明。
import java.util.ArrayList // 导入 Java 类
def list = new ArrayList() // 创建 Java 对象
list.add("Hello") // 调用 Java 方法
list.add(2023)
String str = "Groovy & Java" // 显式声明类型也可
println str.toUpperCase() // 调用 Java String 方法
Groovy 会自动处理类型转换,例如将 Groovy 的 String 类型传递给 Java 方法的 java.lang.String 参数,无需手动转换。
继承 Java 类与实现接口
Groovy 类可以继承 Java 类或实现 Java 接口,这与 Java 语法类似,但支持更灵活的默认实现,创建一个继承 java.util.ArrayList 的 Groovy 类:
import java.util.ArrayList
class CustomList extends ArrayList {
def customMethod() {
println("Custom method from Groovy")
}
}
def customList = new CustomList()
customList.add("Item")
customList.customMethod()
同样,实现 Java 接口时,Groovy 允许省略接口中方法的显式实现(若使用默认方法),或通过闭包简化代码。

调用 Java 静态方法与字段
Groovy 通过 操作符直接调用 Java 类的静态方法和字段,无需像 Java 那样使用 类名.方法名 的完整路径(若已导入)。
import java.lang.Math def result = Math.max(10, 20) // 调用静态方法 println result // 也可直接使用全限定名 def pi = java.lang.Math.PI println pi
Groovy 还支持通过 @Grab 注解自动依赖 Maven 仓库中的 Java 库,进一步简化第三方库的调用。
处理 Java 集合与泛型
Groovy 与 Java 集合类(如 List、Map)完全兼容,且提供了更便捷的操作语法,创建 Java 的 ArrayList 并使用 Groovy 的闭包遍历:
import java.util.ArrayList
def javaList = new ArrayList<String>()
javaList.add("Apple")
javaList.add("Banana")
javaList.each { item -> // Groovy 风格的遍历
println "Fruit: $item"
}
Groovy 的集合字面量(如 [1, 2, 3])默认创建为 java.util.ArrayList,可直接传递给 Java 方法。

异常处理与性能考虑
Groovy 的异常处理机制与 Java 一致,支持 try-catch-finally 块,但 Groovy 默认不检查受检异常(Checked Exceptions),调用 Java 方法时无需显式捕获受检异常,除非需要特殊处理。
性能方面,Groovy 动态调用的开销略高于 Java 静态调用,但在热点代码中可通过 @CompileStatic 注解启用静态编译,接近 Java 的执行效率。
Groovy 与 Java 的互操作性是其设计的核心优势,无论是调用 Java 类、继承接口,还是操作集合和静态资源,Groovy 都提供了简洁且高效的语法,开发者可以基于现有 Java 生态构建 Groovy 应用,同时利用动态语言特性提升开发效率,这种无缝集成使得 Groovy 成为 Java 平台上的理想扩展工具。


















