How to use Kotlin in Java project

bài Introduction to the Kotlin Language mình có giới thiệu sơ về Kotlin và mình cũng có hứa sẽ chia sẻ kinh nghiệm của trong quá trình tích hợp Kotlin. Đây là một trong loạt bài đó.

Đầu tiên ta cần có một Java project và mình chọn project sample trong bài Custom Exceptionrepo này nhé!

Các bạn chạy các lệnh sau nha (có thể copy và chạy một lần cũng được):

# clone git sample repo
git clone https://gitlab.com/thanhtrixx/trile-dev-sample/
cd trile-dev-sample/
# copy to new project
cp -r custom-exception how-to-use-kotlin-in-java-project

Mở IDE. Ở đây mình dùng IntelliJ IDEA CE và làm theo các bước sau.

1. Update Gradle build config

Đổi tên project (nếu không cần đổi tên thì bỏ qua bước này). Mở file settings.gradle và update lại:

1
rootProject.name = 'how-to-use-kotlin-in-java-project'

Thêm plugins trong file build.gradle

1
2
// Apply the Kotlin JVM plugin to add support for Kotlin.
id 'org.jetbrains.kotlin.jvm' version '1.3.41'

tương tự với dependencies

1
2
// Apply the Kotlin JVM plugin to add support for Kotlin.
id 'org.jetbrains.kotlin.jvm' version '1.3.41'

cuối cùng thêm config để compileKotlin và build jar file

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
compileKotlin {
  kotlinOptions {
    freeCompilerArgs = ["-Xjsr305=strict"]
    jvmTarget = "1.8"
  }
}

java.sourceCompatibility = JavaVersion.VERSION_1_8

jar {
  zip64 = true

  from {
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
  }
  exclude('META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA')
}

2. Kotlin call Java

Tạo ra thư mục chứa các Kotlin class. Rule là các file .kt của Kotlin phải nằm trong thư mục src/main/kotlin

mkdir -p src/main/kotlin/dev/trile/java2kotlin

Tạo KotlinSalaryTransfer class với nội dung sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class KotlinSalaryTransfer {
  private val moneyTransfer = MoneyTransfer()
  private val salaryCalculator = SalaryCalculator()

  fun salaryTransfer(workingDay: Int, salaryPerDay: Int, accountNo: String?) {
    val salary = salaryCalculator.calcSalary(workingDay, salaryPerDay)
    moneyTransfer.transferMoney(accountNo, salary)
    println("Transfer Salary success")
  }
}

fun main(args: Array<String>) {
  val salaryTransfer = SalaryTransfer()
  try {
    salaryTransfer.salaryTransfer(args[0].toInt(), args[1].toInt(), args[2])
  } catch (e: NumberFormatException) {
    println("Parse int error " + e.message)
  } catch (e: SalaryException) {
    println(e.message)
  }
}
Build và chạy thử
# build
./gradlew clean build
# run
java -cp build/libs/*.jar dev.trile.java2kotlin.KotlinSalaryTransferKt 11 1000000 EM1

Các bạn kiểm tra kết quả có giống như bài Custom Exception giúp mình nhé ;))

3. Java call Kotlin

Viết lại class VietcomBank bằng Kotlin kotlin

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class VietcomBank : Bank {

  @Throws(SalaryException::class)
  override fun transferMoney(accountNo: String, amount: Int) {
    checkTransferParams(accountNo, amount)

    if (amount > 10000000)
      throw SalaryException(ErrorType.TRANSFER_MONEY_NOT_ENOUGH_MONEY, "VCB only support transfer amount less than 10M")

    println("VCB Kotlin transfer success")
  }
}

Update MoneyTransfer sử dụng class VietcomBank mới

1
2
//  private final Bank vietcomBank = new VietcomBank();
private final Bank vietcomBank = new dev.trile.java2kotlin.VietcomBank();
Build và chạy thử
# build
./gradlew clean build
# run
java -cp build/libs/*.jar dev.trile.java2kotlin.KotlinSalaryTransferKt 5 1000000 EM1

Kết quả sẽ được update lại

Transfer 5000000 to EM1
VCB Kotlin transfer success
Transfer Salary success

Kết: Với bài này ta sẽ biết được bước đầu tiên để tích hợp Kotlin vào Java nhưng để hoàn toàn chuyển đổi qua Kotlin là một đoạn đường dài. Mình sẽ viết thêm vài bài để giúp bạn nào muốn cùng bước đi với mình trên đoạn đường này được dễ dàng hơn ;))

Phần code sample mình update vào repo này nhé. Cảm ơn các bạn đã đọc tới đây.

updatedupdated2026-08-302026-08-30
Hiển thị bình luận?