1. 安定版では、列挙型、シールされたクラス、およびブールサブジェクトの when ステートメントがすべて使用されます。
網羅的なwhen
ステートメントには、サブジェクトのすべての可能な型または値に対する分岐、またはelse
一部の型に対する分岐が含まれます。考えられるすべてのシナリオをカバーし、コードをより安全にします。
非網羅的なwhen
ステートメントは、動作when
と表現の一貫性を保つために抑制されようとしています。スムーズな移行を保証するために、Kotlin 1.6.0 では、when
列挙型、シールされたクラス、またはブール型のトピックに関する非網羅的なステートメントに対して警告が発行されます。これらの警告は、将来のリリースではエラーになります。
2. 安定版のスーパータイプとしてのサスペンド機能
Kotlin 1.6.0 では、suspend 関数タイプの実装が安定しました。1.5.30 ではプレビュー バージョンが利用可能です。
この機能は、Kotlin コルーチンを使用し、中断された関数タイプを受け入れる API を設計する場合に役立ちます。サスペンド関数タイプを実装する別のクラスに目的の動作をカプセル化することで、コードを簡素化できるようになりました。
class MyClickAction : suspend () -> Unit {
override suspend fun invoke() { TODO() }
}
fun launchOnClick(action: suspend () -> Unit) {}
以前はラムダと一時停止された関数の参照のみが許可されていましたが、現在はこのクラスのインスタンスが許可されていますlaunchOnClick(MyClickAction())
。
現在、実装の詳細により 2 つの制限があります。
- スーパータイプ リストに通常の関数タイプと一時停止された関数タイプを混在させることはできません。
- 複数の一時停止関数スーパータイプを使用することはできません。
3. 安定版では変換がハングする
Kotlin 1.6.0 では、通常の関数タイプから一時停止された関数タイプへの安定した変換が導入されています。1.4.0 以降、この機能は関数リテラルと呼び出し可能参照をサポートします。1.6.0 では、あらゆる形式の表現で使用できます。呼び出しパラメータとして、保留中の関数タイプが予期される通常の関数タイプに適した任意の式を渡すことができるようになりました。コンパイラは暗黙的な変換を自動的に実行します。
fun getSuspending(suspending: suspend () -> Unit) {}
fun suspending() {}
fun test(regular: () -> Unit) {
getSuspending { } // OK
getSuspending(::suspending) // OK
getSuspending(regular) // OK
}
4. 安定版アノテーションクラスのインスタンス化
Kotlin 1.5.30 では、JVM プラットフォーム上でアノテーション クラスをインスタンス化するための実験的なサポートが導入されています。1.6.0 では、この機能は Kotlin/JVM および Kotlin/JS でデフォルトで利用可能です。
5. 再帰ジェネリック型の型推論の改善
Kotlin 1.5.30 では、再帰ジェネリック型の型推論が改善され、対応する型パラメーターの上限のみに基づいて型パラメーターを推論できるようになりました。この改善はコンパイラ オプションでのみ利用できます。バージョン 1.6.0 以降では、この機能はデフォルトで有効になっています
// Before 1.5.30
val containerA = PostgreSQLContainer<Nothing>(DockerImageName.parse("postgres:13-alpine")).apply {
withDatabaseName("db")
withUsername("user")
withPassword("password")
withInitScript("sql/schema.sql")
}
// With compiler option in 1.5.30 or by default starting with 1.6.0
val containerB = PostgreSQLContainer(DockerImageName.parse("postgres:13-alpine"))
.withDatabaseName("db")
.withUsername("user")
.withPassword("password")
.withInitScript("sql/schema.sql")
6. ビルダーの型推論の変更
ビルダー推論は、汎用ビルダー関数を呼び出すときに非常に役立つ型推論方法です。呼び出しのラムダ パラメーター内の型情報から呼び出しの型パラメーターを推測できます。
完全に安定したビルダー推論に近づけるために複数の変更を加えました。1.6.0 以降:
まだ推論されていない型のインスタンスを返す関数は、1.5.30 で導入された -Xunrestricted-builder-inference コンパイラ オプションを指定せずに、ビルダー ラムダで呼び出すことができます。-Xenable-builder-inference を使用すると、@BuilderInference アノテーションを適用せずに独自のビルダーを作成できます。
これらのビルダーのクライアントは、同じ -Xenable-builder-inference コンパイラ オプションを指定する必要があることに注意してください。
-Xenable-builder-inference を使用すると、通常の型推論では型に関する十分な情報を取得できない場合に、ビルダー推論が自動的にアクティブになります。
7. クラス型パラメータのアノテーションのサポート
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class BoxContent
class Box<@BoxContent T> {}
すべての型パラメータの注釈は、注釈プロセッサで使用できるように JVM バイトコードにコンパイルされます。