BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Kotlin 1.5がJava 15機能と新しいJVMコンパイラをサポート

Kotlin 1.5がJava 15機能と新しいJVMコンパイラをサポート

原文(投稿日:2021/05/06)へのリンク

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 recordsjava.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が必要である。

この記事に星をつける

おすすめ度
スタイル

BT