跳过到内容

java groovy kotlin 三者的比较

更新时间:2025/5/13
文章字数:0
阅读时长:0 分钟
特性JavaGroovyKotlin
类型系统强静态类型动态类型(默认),可选静态静态类型,有类型推断
语法简洁性冗长非常简洁简洁
空安全有(null安全内置)
函数式编程有限支持(Java 8+)良好支持良好支持
脚本能力有限支持
编译速度中等
扩展方法
DSL支持优秀良好
协程
默认修饰符package-privatepublicpublic
主要用途企业应用, Android脚本, 测试, DSLAndroid, 全栈

入门示例

Hello World

java
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}
groovy
println 'Hello, World!'
kotlin
fun main() {
  println("Hello, World!")
}

基础工程搭建

shell
## 使用maven搭建
mvn archetype:generate -DgroupId=com.example -DartifactId=java-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

## 使用gradle搭建
gradle init --type java-application
shell
## 使用maven搭建
mvn archetype:generate -DgroupId=com.example -DartifactId=groovy-demo -DarchetypeArtifactId=groovy-maven-archetype -DinteractiveMode=false

## 使用gradle搭建
gradle init --type groovy-application
shell
## 使用maven搭建
mvn archetype:generate -DgroupId=com.example -DartifactId=kotlin-demo -DarchetypeArtifactId=kotlin-archetype-jvm -DinteractiveMode=false

## 使用gradle搭建
gradle init --type kotlin-application

混合项目搭建

目录结构

text
project-root/
├── build.gradle
├── settings.gradle
├── src/
│   ├── main/
│   │   ├── java/       # Java 源代码
│   │   ├── groovy/     # Groovy 源代码
│   │   ├── kotlin/     # Kotlin 源代码
│   │   └── resources/  # 资源文件
│   └── test/
│       ├── java/       # Java 测试代码
│       ├── groovy/     # Groovy 测试代码
│       ├── kotlin/     # Kotlin 测试代码
│       └── resources/  # 测试资源文件
└── build/              # 构建输出目录

build.gradle

groovy
plugins {
  id 'java'
  id 'groovy'                                     // Groovy 应该在 Java 之后
  id 'org.jetbrains.kotlin.jvm' version '1.8.0'   // Kotlin 应该在 Java 之后
}

repositories {
  mavenCentral()
}

dependencies {
  // Java 依赖
  implementation 'com.google.guava:guava:31.1-jre'
  // Groovy 依赖
  implementation 'org.codehaus.groovy:groovy-all:3.0.13'
  // Kotlin 依赖
  implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
  // 测试依赖
  testImplementation 'junit:junit:4.13.2'
}

// 设置源代码目录
sourceSets {
  main {
    java { srcDirs = ['src/main/java'] }
    groovy { srcDirs = ['src/main/groovy'] }
    kotlin { srcDirs = ['src/main/kotlin'] }
    resources { srcDirs = ['src/main/resources'] }
  }
  test {
    java { srcDirs = ['src/test/java'] }
    groovy { srcDirs = ['src/test/groovy'] }
    kotlin { srcDirs = ['src/test/kotlin'] }
    resources { srcDirs = ['src/test/resources'] }
  }
}

tasks.withType(JavaCompile).configureEach {
  sourceCompatibility = '17'
  targetCompatibility = '17'
}

compileKotlin {
  kotlinOptions.jvmTarget = "17"
}
compileTestKotlin {
  kotlinOptions.jvmTarget = "17"
}

compileGroovy {
  targetCompatibility = '17'
}