Kotlin 1.5では、レコードクラス、シールドインターフェイス、インラインクラスなどの最新のJava機能のサポートが導入されている。さらに、標準ライブラリと新しいJVM IRコンパイラに多くの改善が加えられている。
Java records
は、不変データを含むクラスである。Kotlinデータクラスは、@JvmRecord
でアノテーションを付けることで、Java record
として使用できる。
@JvmRecord
data class User(val name: String, val age: Int)
record
として使用するには、Kotlinデータクラスを他のクラスから派生させてはいけない。すべてのJava records
はjava.lang.Record
から派生しているためである。しかし、インターフェイスの実装は可能である。追加の要件があり、バッキングフィールドとローカルクラスを使用して可変プロパティを宣言することは禁止となる。
Kotlin 1.5では、シールドインターフェイスに対するサポートも導入されている。そして、シールドラスの要件が緩和されている。シールドインターフェースとシールドクラスはどちらも、継承をきめ細かく制御することを目的としたJava機能である。これは、クラスとインターフェースで、許可されたサブタイプを指定できるようにすることで実現される。シールドクラスの許可されたサブクラスはコンパイル時に認識され、その後追加することはできない。シールドクラスは、sealed
修飾子でプレフィックスを付けることで宣言できる。Kotlin 1.5では、シールドインターフェイスとシールドクラスは同じファイルに属する必要がない。そして、同じコンパイルユニットとパッケージ内の任意のファイルに記述できる。
最後に、Kotlin 1.5では、inline classes
が安定版となっている。これは、メモリ割り当て関連のオーバーヘッドを発生させない値型である。インラインクラスは、value
修飾子を使って宣言できる。
@JvmInline //required for the JVM backend
value class Password(val s: String)
前述のように、Kotlin 1.5では、標準ライブラリにも多くの改善があった。特に、符号なし整数用の新しいAPI、ノンブロッキングJava I/Oを使用するための慣用的な拡張関数、StringとChar APIの改善があった。
コンパイラ全体を書き直すプロジェクトの一環として、Kotlinは昨年、Kotlin1.5で、安定版となる新しいIRバックエンドとのデフォルトコンパイラを導入した。JetBrainsによると、新しいIRバックエンドによるパフォーマンスが向上するはずである。また、同時に、新しい言語機能のサポートを追加するための健全なインフラストラクチャを提供するはずである。Kotlin 1.5によってJVMバックエンドに追加される新機能は、新しいコンパイラだけではない。これにより、型のnull可能性の処理と、SAMアダプタおよびラムダのコンパイルも改善されている。
Kotlin 1.5には、少なくともAndroid Studio 4.2またはArctic Fox Canary 15が必要である。