1. JVMレコードタイプのサポート
Java は急速に進化しており、Kotlin と確実に相互運用できるようにするために、最新機能の 1 つであるレコード クラスのサポートが導入されました。
Kotlin の JVM ロギングのサポートには、双方向の相互運用性が含まれています。
Kotlin コードでは、プロパティを持つ一般的なクラスと同じように Java レコード クラスを使用できます。
Kotlin クラスを Java コードのレコードとして使用するには、それをデータ クラスにし、 @JvmRecord アノテーションを付けます。
@JvmRecord
data class User(val name: String, val age: Int)
2. シール界面
Kotlin インターフェースは、sealed 修飾子を使用できるようになりました。これは、インターフェース上でもクラス上でも同様に機能します。sealed インターフェースのすべての実装はコンパイル時に認識されます。
sealed interface Polygon
fun draw(polygon: Polygon) = when (polygon) {
is Rectangle -> // ...
is Triangle -> // ...
// else is not needed - all possible implementations are covered
}
3. パッケージスコープのシールされたクラス階層
シールされたクラスは、同じコンパイル単位および同じパッケージ内のすべてのファイルにサブクラスを持つことができるようになりました。以前は、すべてのサブクラスが同じファイル内に存在する必要がありました。
直接のサブクラスは、トップレベルのクラスにすることも、他の任意の数の名前付きクラス、名前付きインターフェイス、または名前付きオブジェクト内にネストすることもできます。
シールされたクラスのサブクラスには、適切に修飾された名前が必要です。ローカル オブジェクトや匿名オブジェクトにすることはできません。
4. インラインクラス
インライン クラスは値クラスのサブセットであり、値のみが含まれます。これらは、メモリ割り当てのオーバーヘッドを追加することなく、特定の型の値のラッパーとして使用できます。
インライン クラスは、value
クラス名の前に修飾子を使用して宣言できます。
value class Password(val s: String)
JVM バックエンドには特別な@JvmInline
アノテーションも必要です。
@JvmInline
value class Password(val s: String)