Kotlin 1.7.0 の新機能

1. インライン クラスのインライン値は委任を通じて実装できます。

値またはクラス インスタンスの軽量ラッパーを作成する場合は、すべてのインターフェイス メソッドを手動で実装する必要があります。デリゲートを介して実装するとこの問題は解決しますが、1.7.0 より前ではインライン クラスでは機能しませんでした。この制限が削除されたため、ほとんどの場合にメモリ割り当てを必要としない軽量ラッパーを作成できるようになりました。

interface Bar {
    fun foo() = "foo"
}

@JvmInline
value class BarWrapper(val bar: Bar): Bar by bar

fun main() {
    val bw = BarWrapper(object: Bar {})
    println(bw.foo())
}

2. アンダースコア演算子は型パラメータに使用されます

Kotlin 1.7.0 では、型パラメーターにアンダースコア演算子 _ が導入されました。これを使用すると、他の型が指定されたときに型パラメーターを自動的に推論できます。

abstract class SomeClass<T> {
    abstract fun execute(): T
}

class SomeImplementation : SomeClass<String>() {
    override fun execute(): String = "Test"
}

class OtherImplementation : SomeClass<Int>() {
    override fun execute(): Int = 42
}

object Runner {
    inline fun <reified S: SomeClass<T>, T> run(): T {
        return S::class.java.getDeclaredConstructor().newInstance().execute()
    }
}

fun main() {
    // T is inferred as String because SomeImplementation derives from SomeClass<String>
    val s = Runner.run<SomeImplementation, _>()
    assert(s == "Test")

    // T is inferred as Int because OtherImplementation derives from SomeClass<Int>
    val n = Runner.run<OtherImplementation, _>()
    assert(n == 42)
}

型パラメータは、変数リスト内の任意の場所でアンダースコア演算子を使用して推論できます。

3. 安定版ビルダーの推論

ビルダー推論は、汎用ビルダー関数を呼び出すときに役立つ特殊なタイプの型推論です。これは、コンパイラーがラムダ パラメーター内の他の呼び出しからの型情報を使用して呼び出しの型パラメーターを推論するのに役立ちます。

1.7.0 以降、 -Xenable-builder-inference コンパイラー オプション (1.6.0 で導入) を指定せずに通常の型推論で型に関する十分な情報を取得できない場合、ビルダー推論が自動的にアクティブになります。

カスタムの汎用ビルダーの作成方法を学習します

4. 安定版のオプトイン要件

バージョン 1.7.0 では、Kotlin のオプトイン要件が安定しており、追加のコンパイラー構成は必要ありません。

バージョン 1.7.0 より前のバージョンでは、警告を回避するためにオプトイン機能自体にパラメーター -opt-in=kotlin.RequiresOptIn が必要でした。これは必要なくなりましたが、コンパイラ パラメータ -opt-in を使用して、モジュール全体を対象としたオプトイン用の他のアノテーションを選択することはできます。

5. 安定版は空の型であってはなりません

Kotlin 1.7.0 では、明示的な非 null 型が安定性機能に昇格されました。これらは、汎用 Java クラスおよびインターフェイスを拡張する際の相互運用性を向上させます。

新しい構文 T & Any を使用すると、型パラメーターを使用するときに明示的に非 null としてマークできます。この構文形式は交差型の表記法から来ており、& の左側に null 許容の上限を持ち、右側に null 以外の Any を持つ型パラメーターを持つように制約されています。

fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y

fun main() {
    // OK
    elvisLike<String>("", "").length
    // Error: 'null' cannot be a value of a non-null type
    elvisLike<String>("", null).length

    // OK
    elvisLike<String?>(null, "").length
    // Error: 'null' cannot be a value of a non-null type
    elvisLike<String?>(null, null).length
}

6. 標準ライブラリ

Kotlin 1.7.0 では、標準ライブラリに一連の変更と改善が加えられました。これらは、新機能の導入、実験的機能の安定化、およびネイティブ、JS、および JVM での名前付きキャプチャ グループのサポートの統合を行います。

おすすめ

転載: blog.csdn.net/old_land/article/details/130218138