Skip to content

Kotlin 1.5.0の新機能

リリース日: 2021年5月5日

Kotlin 1.5.0では、新しい言語機能、安定版のIRベースJVMコンパイラーバックエンド、パフォーマンス改善、 そして実験的機能の安定化や非推奨化といった進化的な変更が導入されています。

変更点の概要については、リリースブログ記事でも確認できます。

言語機能

Kotlin 1.5.0では、1.4.30でプレビュー版として提供された新しい言語機能の安定版が導入されました。

これらの機能の詳細については、こちらのブログ記事と、 Kotlinドキュメントの対応するページで確認できます。

JVMレコードのサポート

Javaは急速に進化しており、Kotlinとの相互運用性を確保するため、その最新機能の1つである レコードクラスのサポートが導入されました。

KotlinのJVMレコードサポートには、双方向の相互運用性が含まれます。

  • Kotlinコードでは、Javaのレコードクラスを通常のプロパティを持つクラスと同じように使用できます。
  • KotlinクラスをJavaコードでレコードとして使用するには、dataクラスにして@JvmRecordアノテーションを付与します。
kotlin
@JvmRecord
data class User(val name: String, val age: Int)

KotlinでJVMレコードを使用する方法の詳細をご覧ください。

Sealedインターフェース

Kotlinインターフェースでsealed修飾子を使用できるようになりました。これはクラスの場合と同様にインターフェースに適用されます。 sealedインターフェースのすべての実装はコンパイル時に認識されます。

kotlin
sealed interface Polygon

この事実を利用して、例えば、網羅的なwhen式を記述できます。

kotlin
fun draw(polygon: Polygon) = when (polygon) {
   is Rectangle -> // ...
   is Triangle -> // ...
   // else is not needed - all possible implementations are covered
}

さらに、sealedインターフェースは、クラスが複数のsealedインターフェースを直接継承できるため、より柔軟な制限されたクラス階層を可能にします。

kotlin
class FilledRectangle: Polygon, Fillable

sealedインターフェースの詳細をご覧ください。

パッケージ全体にわたるSealedクラスの階層

Sealedクラスは、同じコンパイルユニットおよび同じパッケージ内のすべてのファイルにサブクラスを持つことができるようになりました。 以前は、すべてのサブクラスが同じファイル内に存在する必要がありました。

直接のサブクラスは、トップレベル、または任意の数の他の名前付きクラス、名前付きインターフェース、または名前付きオブジェクト内にネストされたものでも構いません。

Sealedクラスのサブクラスは、適切に修飾された名前を持たなければなりません。ローカルオブジェクトまたは匿名オブジェクトにすることはできません。

Sealedクラスの階層の詳細をご覧ください。

インラインクラス

インラインクラスは、値のみを保持する値ベースクラスのサブセットです。 特定の型の値のラッパーとして使用でき、メモリ割り当てから生じる追加のオーバーヘッドを伴いません。

インラインクラスは、クラス名の前にvalue修飾子を付けて宣言できます。

kotlin
value class Password(val s: String)

JVMバックエンドは、特別な@JvmInlineアノテーションも必要とします。

kotlin
@JvmInline
value class Password(val s: String)

inline修飾子は警告付きで非推奨になりました。

インラインクラスの詳細をご覧ください。

Kotlin/JVM

Kotlin/JVMは、内部およびユーザー向けの双方でいくつかの改善が行われました。その中でも特に注目すべき点は次のとおりです。

JVM IRバックエンドの安定化

Kotlin/JVMコンパイラー用のIRベースのバックエンド安定版となり、デフォルトで有効になりました。

Kotlin 1.4.0以降、IRベースのバックエンドの早期バージョンがプレビュー版として利用可能でしたが、 1.5言語バージョンではデフォルトとなりました。古いバックエンドは、以前の言語バージョンでは引き続きデフォルトで使用されます。

IRバックエンドの利点とその将来の開発については、こちらのブログ記事で詳しく説明されています。

Kotlin 1.5.0で古いバックエンドを使用する必要がある場合は、プロジェクトの構成ファイルに次の行を追加します。

  • Gradleの場合:
kotlin
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile> {
  kotlinOptions.useOldBackend = true
}
groovy
tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile) {
 kotlinOptions.useOldBackend = true
}
  • Mavenの場合:
xml
<configuration>
    <args>
        <arg>-Xuse-old-backend</arg>
    </args>
</configuration>

新しいデフォルトJVMターゲット: 1.8

Kotlin/JVMコンパイルのデフォルトターゲットバージョンが1.8になりました。1.6ターゲットは非推奨です。

JVM 1.6用のビルドが必要な場合は、このターゲットに切り替えることができます。方法については以下をご覧ください。

invokedynamic経由のSAMアダプター

Kotlin 1.5.0では、SAM (Single Abstract Method) 変換のコンパイルに動的呼び出し (invokedynamic) を使用するようになりました。

新しい実装ではLambdaMetafactory.metafactory()を使用し、 コンパイル時に補助ラッパークラスが生成されなくなりました。これにより、アプリケーションのJARサイズが減少し、JVMの起動パフォーマンスが向上します。

匿名クラス生成に基づく古い実装スキームに戻すには、コンパイラーオプション-Xsam-conversions=classを追加します。

コンパイラーオプションの追加方法については、GradleMaven、 およびコマンドラインコンパイラーをご覧ください。

invokedynamic経由のラムダ

純粋なKotlinラムダをinvokedynamicにコンパイルする機能は実験的です。これはいつでも廃止または変更される可能性があります。 オプトインが必要です(詳細については下記参照)。評価目的のみにご利用ください。YouTrackにてフィードバックをお寄せいただけると幸いです。

Kotlin 1.5.0では、純粋なKotlinラムダ(関数型インターフェースのインスタンスに変換されないもの)を動的呼び出し (invokedynamic) にコンパイルする実験的なサポートを導入しています。 この実装は、LambdaMetafactory.metafactory()を使用することでより軽量なバイナリを生成し、 実行時に必要なクラスを効果的に生成します。現在、通常のラムダコンパイルと比較して3つの制限があります。

  • invokedynamicにコンパイルされたラムダはシリアライズできません。
  • そのようなラムダに対してtoString()を呼び出すと、読み取りにくい文字列表現が生成されます。
  • 実験的なreflect APIは、LambdaMetafactoryで作成されたラムダをサポートしていません。

この機能を試すには、コンパイラーオプション-Xlambdas=indyを追加してください。 このYouTrackチケットを使用して、フィードバックを共有していただけると幸いです。

コンパイラーオプションの追加方法については、GradleMaven、 およびコマンドラインコンパイラーをご覧ください。

@JvmDefaultおよび古いXjvm-defaultモードの非推奨化

Kotlin 1.4.0より前は、@JvmDefaultアノテーションと-Xjvm-default=enableおよび-Xjvm-default=compatibilityモードがありました。 これらはKotlinインターフェース内の特定の非抽象メンバーに対してJVMデフォルトメソッドを作成するために使用されました。

Kotlin 1.4.0では、プロジェクト全体でデフォルトメソッドの生成を切り替える新しいXjvm-defaultモードを導入しました

Kotlin 1.5.0では、@JvmDefaultと古いXjvm-defaultモード(-Xjvm-default=enableおよび-Xjvm-default=compatibility)を非推奨化します。

Javaとの相互運用におけるデフォルトメソッドの詳細をご覧ください。

null許容アノテーションの取り扱い改善

Kotlinは、null許容アノテーションを使用してJavaからの型のnull許容情報を処理することをサポートしています。 Kotlin 1.5.0では、この機能に関していくつかの改善が導入されています。

  • 依存関係として使用されるコンパイル済みJavaライブラリの型引数上のnull許容アノテーションを読み取ります。
  • TYPE_USEターゲットを持つnull許容アノテーションを以下のケースでサポートします。
    • 配列
    • 可変引数 (Varargs)
    • フィールド
    • 型パラメーターとそのバウンド
    • 基底クラスとインターフェースの型引数
  • null許容アノテーションが型に適用可能な複数のターゲットを持ち、そのうちの1つがTYPE_USEの場合、TYPE_USEが優先されます。 例えば、@NullableTYPE_USEMETHODの両方をターゲットとしてサポートしている場合、メソッドシグネチャ@Nullable String[] f()fun f(): Array<String?>!となります。

これらの新しくサポートされたケースでは、KotlinからJavaを呼び出す際に誤った型null許容を使用すると警告が表示されます。 これらのケースで厳格モード(エラー報告付き)を有効にするには、コンパイラーオプション-Xtype-enhancement-improvements-strict-modeを使用します。

null安全性とプラットフォーム型の詳細をご覧ください。

Kotlin/Native

Kotlin/Nativeは、より高いパフォーマンスと安定性を実現しました。主な変更点は次のとおりです。

パフォーマンスの改善

1.5.0では、Kotlin/Nativeはコンパイルと実行の両方を高速化する一連のパフォーマンス改善が施されています。

コンパイラーキャッシュが、 linuxX64(Linuxホストのみ)とiosArm64ターゲットのデバッグモードでサポートされるようになりました。 コンパイラーキャッシュを有効にすると、最初のコンパイルを除き、ほとんどのデバッグコンパイルが大幅に高速化されます。 測定では、テストプロジェクトで約200%の速度向上が示されました。

新しいターゲットでコンパイラーキャッシュを使用するには、プロジェクトのgradle.propertiesに以下の行を追加してオプトインします。

  • linuxX64の場合: kotlin.native.cacheKind.linuxX64=static
  • iosArm64の場合: kotlin.native.cacheKind.iosArm64=static

コンパイラーキャッシュを有効にした後に問題が発生した場合は、弊社の課題トラッカーであるYouTrackまでご報告ください。

その他の改善により、Kotlin/Nativeコードの実行が高速化されます。

  • 自明なプロパティアクセサーがインライン化されます。
  • 文字列リテラル上のtrimIndent()がコンパイル時に評価されます。

メモリリークチェッカーの無効化

組み込みのKotlin/Nativeメモリリークチェッカーがデフォルトで無効になりました。

これは元々内部使用向けに設計されており、限られたケースでしかリークを発見できず、すべてのケースには対応していませんでした。 さらに、後にアプリケーションのクラッシュを引き起こす可能性のある問題があることが判明しました。 そのため、メモリリークチェッカーをオフにすることにしました。

メモリリークチェッカーは、例えば単体テストのような特定のケースでは依然として役立ちます。 これらのケースでは、次のコード行を追加することで有効にできます。

kotlin
Platform.isMemoryLeakCheckerActive = true

アプリケーションのランタイムでチェッカーを有効にすることは推奨されません。

Kotlin/JS

Kotlin/JSは1.5.0で進化的な変更を受けています。JS IRコンパイラーバックエンドを安定版に移行する作業を継続し、 その他の更新も出荷しています。

webpackバージョン5へのアップグレード

Kotlin/JS Gradleプラグインは、ブラウザターゲットにwebpack 4の代わりにwebpack 5を使用するようになりました。 これは互換性のない変更をもたらす主要なwebpackアップグレードです。 カスタムwebpack設定を使用している場合は、webpack 5のリリースノートを必ず確認してください。

webpackを使用したKotlin/JSプロジェクトのバンドルに関する詳細をご覧ください。

IRコンパイラー向けフレームワークとライブラリ

Kotlin/JS IRコンパイラーはアルファ版です。将来的に互換性のない変更があり、手動での移行が必要になる場合があります。 YouTrackでフィードバックをお寄せいただけると幸いです。

Kotlin/JSコンパイラーのIRベースのバックエンドに取り組むとともに、ライブラリ作者がbothモードでプロジェクトを構築することを推奨し、支援しています。 これにより、両方のKotlin/JSコンパイラー向けに成果物を生成できるようになり、新しいコンパイラーのエコシステムが成長します。

多くの有名なフレームワークやライブラリがすでにIRバックエンドで利用可能です。 KVisionfritz2doodleなどです。 プロジェクトでこれらを使用している場合は、すでにIRバックエンドでビルドを行い、その利点を確認できます。

独自のライブラリを作成している場合は、「both」モードでコンパイルします。 これにより、クライアントも新しいコンパイラーでそれを使用できるようになります。

Kotlinマルチプラットフォーム

Kotlin 1.5.0では、各プラットフォームのテスト依存関係の選択が簡素化され、 Gradleプラグインによって自動的に行われるようになりました。

マルチプラットフォームコードで文字カテゴリを取得するための新しいAPIが利用可能になりました。

標準ライブラリ

標準ライブラリは、実験的機能の安定化から新機能の追加まで、幅広い変更と改善を受けています。

標準ライブラリの変更点の詳細については、こちらのブログ記事をご覧ください。

符号なし整数型の安定化

UIntULongUByteUShortの符号なし整数型が安定版になりました。 これらの型に対する演算、それらの範囲、およびプログレッションについても同様です。符号なし配列とその演算はベータ版のままです。

符号なし整数型の詳細をご覧ください。

ロケール非依存の文字列大小文字変換APIの安定化

このリリースでは、文字列の大小文字変換のための新しいロケール非依存APIが導入されました。 これは、ロケールに依存するtoLowerCase()toUpperCase()capitalize()decapitalize() API関数の代替を提供します。 新しいAPIは、異なるロケール設定によるエラーを回避するのに役立ちます。

Kotlin 1.5.0では、以下の完全に安定版の代替機能が提供されます。

  • String関数について:

    以前のバージョン1.5.0の代替
    String.toUpperCase()String.uppercase()
    String.toLowerCase()String.lowercase()
    String.capitalize()String.replaceFirstChar { it.uppercase() }
    String.decapitalize()String.replaceFirstChar { it.lowercase() }
  • Char関数について:

    以前のバージョン1.5.0の代替
    Char.toUpperCase()Char.uppercaseChar(): Char
    Char.uppercase(): String
    Char.toLowerCase()Char.lowercaseChar(): Char
    Char.lowercase(): String
    Char.toTitleCase()Char.titlecaseChar(): Char
    Char.titlecase(): String

Kotlin/JVMの場合、明示的なLocaleパラメーターを持つオーバーロードされたuppercase()lowercase()titlecase()関数も利用できます。

古いAPI関数は非推奨としてマークされており、将来のリリースで削除される予定です。

テキスト処理関数の変更点の全リストについては、KEEPをご覧ください。

Charから整数への変換APIの安定化

Kotlin 1.5.0以降、新しい文字からコードへの変換関数と文字から数字への変換関数が安定版になりました。 これらの関数は、類似の文字列からIntへの変換と混同されがちだった現在のAPI関数に代わるものです。

新しいAPIは、この命名の混乱を取り除き、コードの動作をより透過的かつ明確にします。

このリリースでは、明確に命名された以下の関数群に分けられたChar変換が導入されます。

  • Charの整数コードを取得し、指定されたコードからCharを構築する関数:
kotlin
fun Char(code: Int): Char
fun Char(code: UShort): Char
val Char.code: Int
  • Charをそれが表す数字の数値に変換する関数:
kotlin
fun Char.digitToInt(radix: Int): Int
fun Char.digitToIntOrNull(radix: Int): Int?
  • 負でない単一の数字を表すIntを対応するChar表現に変換するための拡張関数:
kotlin
fun Int.digitToChar(radix: Int): Char

Number.toChar()の実装(Int.toChar()を除くすべて)とCharの数値型への変換拡張(例: Char.toInt())を含む古い変換APIは、現在非推奨です。

Charから整数への変換APIの詳細については、KEEPをご覧ください。

Path APIの安定化

java.nio.file.Pathの拡張機能を持つ実験的なPath API安定版になりました。

kotlin
// construct path with the div (/) operator
val baseDir = Path("/base")
val subDir = baseDir / "subdirectory"

// list files in a directory
val kotlinFiles: List<Path> = Path("/home/user").listDirectoryEntries("*.kt")

Path APIの詳細をご覧ください。

切り捨て除算とmod演算子

標準ライブラリに、モジュラー算術の新しい操作が追加されました。

  • floorDiv()は、切り捨て除算の結果を返します。これは整数型で利用可能です。
  • mod()は、切り捨て除算の剰余(modulus)を返します。これはすべての数値型で利用可能です。

これらの操作は、既存の整数の除算およびrem()関数(または%演算子)とよく似ていますが、負の数に対する動作が異なります。

  • a.floorDiv(b)は、通常の/とは異なり、結果を切り捨て(より小さい整数の方に丸める)ますが、/は結果を0に近い整数に丸めます。
  • a.mod(b)は、aa.floorDiv(b) * bの差です。これはゼロであるか、bと同じ符号を持ちますが、a % bは異なる符号を持つことがあります。
kotlin
fun main() {
    println("Floored division -5/3: ${(-5).floorDiv(3)}")
    println( "Modulus: ${(-5).mod(3)}")
    
    println("Truncated division -5/3: ${-5 / 3}")
    println( "Remainder: ${-5 % 3}")
}

Duration APIの変更点

Duration APIは実験的です。これはいつでも廃止または変更される可能性があります。 評価目的のみにご利用ください。YouTrackにてフィードバックをお寄せいただけると幸いです。

異なる時間単位で期間量を表す実験的なDurationクラスがあります。 1.5.0では、Duration APIに以下の変更が加えられました。

  • 内部値表現がDoubleからLongを使用するようになり、精度が向上しました。
  • 特定の時間単位へのLongでの変換のための新しいAPIが追加されました。これは、Double値で操作する古いAPIに代わるもので、古いAPIは現在非推奨です。 例えば、Duration.inWholeMinutesは、期間の値をLongとして返し、Duration.inMinutesに代わります。
  • 数値からDurationを構築するための新しいコンパニオン関数が追加されました。例えば、Duration.seconds(Int)は、秒の整数値を表すDurationオブジェクトを作成します。 Int.secondsのような古い拡張プロパティは現在非推奨です。
kotlin
import kotlin.time.Duration
import kotlin.time.ExperimentalTime

@ExperimentalTime
fun main() {
    val duration = Duration.milliseconds(120000)
    println("There are ${duration.inWholeSeconds} seconds in ${duration.inWholeMinutes} minutes")
}

マルチプラットフォームコードで文字カテゴリ取得のための新しいAPIが利用可能に

Kotlin 1.5.0では、Unicodeに従って文字のカテゴリを取得するための新しいAPIがマルチプラットフォームプロジェクトに導入されました。 いくつかの関数が、すべてのプラットフォームと共通コードで利用可能になりました。

文字が文字または数字であるかをチェックする関数:

kotlin
fun main() {
    val chars = listOf('a', '1', '+')
    val (letterOrDigitList, notLetterOrDigitList) = chars.partition { it.isLetterOrDigit() }
    println(letterOrDigitList) // [a, 1]
    println(notLetterOrDigitList) // [+]
}

文字のケースをチェックする関数:

kotlin
fun main() {
    val chars = listOf('Dž', 'Lj', 'Nj', 'Dz', '1', 'A', 'a', '+')
    val (titleCases, notTitleCases) = chars.partition { it.isTitleCase() }
    println(titleCases) // [Dž, Lj, Nj, Dz]
    println(notTitleCases) // [1, A, a, +]
}

その他の関数:

Char.categoryプロパティと、 Unicodeに従った文字の一般的なカテゴリを示すその戻り値のEnumクラスCharCategoryも、 マルチプラットフォームプロジェクトで利用できるようになりました。

文字の詳細をご覧ください。

新しいコレクション関数 firstNotNullOf()

新しいfirstNotNullOf()firstNotNullOfOrNull()関数は、 mapNotNull()first()またはfirstOrNull()を組み合わせたものです。 これらはカスタムセレクター関数を使用して元のコレクションをマップし、最初の非null値を返します。そのような値がない場合、 firstNotNullOf()は例外をスローし、firstNotNullOfOrNull()はnullを返します。

kotlin
fun main() {
    val data = listOf("Kotlin", "1.5")
    println(data.firstNotNullOf(String::toDoubleOrNull))
    println(data.firstNotNullOfOrNull(String::toIntOrNull))
}

String?.toBoolean()の厳格版

既存のString?.toBoolean()の 大文字小文字を区別する厳格版として、2つの新しい関数が導入されました。

kotlin
fun main() {
    println("true".toBooleanStrict())
    println("1".toBooleanStrictOrNull())
    // println("1".toBooleanStrict()) // Exception
}

kotlin-testライブラリ

kotlin-testライブラリにはいくつかの新機能が導入されています。

マルチプラットフォームプロジェクトでのテスト依存関係の利用簡素化

kotlin-test依存関係を使用してcommonTestソースセットにテストの依存関係を追加できるようになりました。 Gradleプラグインは、各テストソースセットに対応するプラットフォーム依存関係を推測します。

さらに、kotlin-test依存関係は、任意の共有またはプラットフォーム固有のソースセットで使用できます。

明示的な依存関係を持つ既存のkotlin-test設定は、GradleとMavenの両方で引き続き機能します。

テストライブラリの依存関係の設定に関する詳細をご覧ください。

Kotlin/JVMソースセット向けのテストフレームワークの自動選択

Gradleプラグインは、テストフレームワークの依存関係を自動的に選択して追加するようになりました。 commonTestソースセットにkotlin-test依存関係を追加するだけで済みます。

GradleはデフォルトでJUnit 4を使用します。したがって、kotlin("test")依存関係はJUnit 4のバリアント、 つまりkotlin-test-junitとして解決されます。

kotlin
kotlin {
    sourceSets {
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test")) // This brings the dependency
                                               // on JUnit 4 transitively
            }
        }
    }
}
groovy
kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test") // This brings the dependency 
                                              // on JUnit 4 transitively
            }
        }
    }
}

useJUnitPlatform()または useTestNG()をテストタスクで呼び出すことで、 JUnit 5またはTestNGを選択できます。

groovy
tasks {
    test {
        // enable TestNG support
        useTestNG()
        // or
        // enable JUnit Platform (a.k.a. JUnit 5) support
        useJUnitPlatform()
    }
}

プロジェクトのgradle.propertieskotlin.test.infer.jvm.variant=falseという行を追加することで、 テストフレームワークの自動選択を無効にできます。

テストライブラリの依存関係の設定に関する詳細をご覧ください。

アサーション関数の更新

このリリースでは、新しいアサーション関数が追加され、既存のものが改善されました。

kotlin-testライブラリには、以下の機能が追加されました。

  • 値の型のチェック

    新しいassertIs<T>およびassertIsNot<T>を使用して、値の型をチェックできます。

    kotlin
    @Test
    fun testFunction() {
        val s: Any = "test"
        assertIs<String>(s)  // throws AssertionError mentioning the actual type of s if the assertion fails
        // can now print s.length because of contract in assertIs
        println("${s.length}")
    }

    型消去のため、このアサート関数は次の例ではvalueList型であることのみをチェックし、特定のString要素型のリストであるかはチェックしません: assertIs<List<String>>(value)

  • 配列、シーケンス、任意のイテラブルのコンテナ内容の比較

    構造的同等性を実装しないさまざまなコレクションのコンテンツを比較するための、オーバーロードされたassertContentEquals()関数が新しく追加されました。

    kotlin
    @Test
    fun test() {
        val expectedArray = arrayOf(1, 2, 3)
        val actualArray = Array(3) { it + 1 }
        assertContentEquals(expectedArray, actualArray)
    }
  • DoubleおよびFloat数値に対するassertEquals()およびassertNotEquals()の新しいオーバーロード

    2つのDoubleまたはFloat数値を絶対精度で比較できるようにするassertEquals()関数の新しいオーバーロードが追加されました。 精度値は関数の3番目のパラメーターとして指定されます。

    kotlin
     @Test
    fun test() {
        val x = sin(PI)
    
        // precision parameter
        val tolerance = 0.000001
    
        assertEquals(0.0, x, tolerance)
    }
  • コレクションと要素の内容をチェックするための新しい関数

    assertContains()関数を使用して、コレクションまたは要素が何かを含んでいるかをチェックできるようになりました。 これはKotlinコレクション、およびIntRangeStringなどのcontains()演算子を持つ要素で使用できます。

    kotlin
    @Test
    fun test() {
        val sampleList = listOf<String>("sample", "sample2")
        val sampleString = "sample"
        assertContains(sampleList, sampleString)  // element in collection
        assertContains(sampleString, "amp")       // substring in string
    }
  • assertTrue()assertFalse()expect()関数がインラインになりました

    これらの関数はインライン関数として使用できるようになり、ラムダ式内でサスペンド関数を呼び出すことが可能になりました。

    kotlin
    @Test
    fun test() = runBlocking<Unit> {
        val deferred = async { "Kotlin is nice" }
        assertTrue("Kotlin substring should be present") {
            deferred.await() .contains("Kotlin")
        }
    }

kotlinxライブラリ

Kotlin 1.5.0とともに、kotlinxライブラリの新しいバージョンがリリースされます。

Coroutines 1.5.0-RC

kotlinx.coroutines 1.5.0-RCには以下が含まれています。

Kotlin 1.5.0以降、実験的コルーチンは無効になり、 -Xcoroutines=experimentalフラグはサポートされなくなります。

詳細については、変更履歴kotlinx.coroutines 1.5.0リリースブログ記事をご覧ください。

Serialization 1.2.1

kotlinx.serialization 1.2.1には以下が含まれています。

  • JSONシリアライズ性能の改善
  • JSONシリアライズにおける複数名のサポート
  • @Serializableクラスからの実験的な.protoスキーマ生成
  • その他

詳細については、変更履歴kotlinx.serialization 1.2.1リリースブログ記事をご覧ください。

dateTime 0.2.0

kotlinx-datetime 0.2.0には以下が含まれています。

  • @SerializableなDatetimeオブジェクト
  • DateTimePeriodおよびDatePeriodの正規化されたAPI
  • その他

詳細については、変更履歴kotlinx-datetime 0.2.0リリースブログ記事をご覧ください。

Kotlin 1.5.0への移行

IntelliJ IDEAとAndroid Studioは、Kotlinプラグインが利用可能になり次第、1.5.0への更新を提案します。

既存のプロジェクトをKotlin 1.5.0に移行するには、Kotlinバージョンを1.5.0に変更し、GradleまたはMavenプロジェクトを再インポートするだけです。 Kotlin 1.5.0への更新方法をご覧ください。

Kotlin 1.5.0で新しいプロジェクトを開始するには、Kotlinプラグインを更新し、File | New | Projectからプロジェクトウィザードを実行します。

新しいコマンドラインコンパイラーは、GitHubリリースページからダウンロードできます。

Kotlin 1.5.0は機能リリースであり、 言語に互換性のない変更をもたらす可能性があります。 これらの変更点の詳細なリストは、Kotlin 1.5互換性ガイドで確認できます。