Kotlinのreifiedキーワードとは?仕組みと使い方を実例で解説
reifiedは、Kotlin開発者が実行時(ランタイム)にクラスに関する情報へアクセスできるようにするための特別なキーワードです。
通常、JVM上では「型消去(Type Erasure)」と呼ばれる仕組みにより、コンパイル後にジェネリック型の情報は失われてしまいます。しかし、reifiedを使うことで、この制限を回避できます。なお、reifiedはinline関数と組み合わせた場合にのみ使用可能です。
reifiedキーワードを使用すると、コンパイラはその関数のバイトコードを、関数が呼び出された箇所すべてにコピー(インライン展開)します。これにより、ジェネリック型 T には、実際に引数として渡された値の具体的な型が割り当てられ、T::class.java のような形で型情報を取得できるようになります。
コード例
ここでは、reifiedがコードの再利用にどのように役立つかを見ていきます。渡される引数の型に関係なく、同じ1つの関数で同様の処理を実行できる点が大きなメリットです。
まずインライン関数を作成し、ジェネリックなreified引数 T を受け取るようにします。そして、Kotlinの main() 関数から、異なる型の引数を指定して myExample() を複数回呼び出してみましょう。
// インライン関数の宣言
inline fun <reified T> myExample(name: T) {
println("\nName of your website -> "+name)
println("\nType of myClass: ${T::class.java}")
}
fun main() {
// String型で関数を呼び出す
myExample<String>("www.tutorialspoint.com")
// Int型の値で関数を呼び出す
myExample<Int>(100)
// Long型の値で関数を呼び出す
myExample<Long>(1L)
}出力結果
このコードを実行すると、以下のような出力が得られます。
Name of your website -> www.tutorialspoint.com Type of myClass: class java.lang.String Name of your website -> 100 Type of myClass: class java.lang.Integer Name of your website -> 1 Type of myClass: class java.lang.Long
出力結果からわかるように、同じ関数を呼び出しているにもかかわらず、引数として渡した値に応じて T::class.java がそれぞれ String・Integer・Long の正確な型情報を出力できています。これこそが、reifiedによって実行時にジェネリック型の情報へアクセスできるようになった証拠です。
-
YouTubeアルゴリズムの仕組みを徹底解説!おすすめ欄と検索結果に表示される方法
YouTubeのおすすめ欄は、多くのユーザーが新しい動画を探すときに最初に目を向ける場所です。ここに表示される動画は、一人ひとりの視聴傾向に合わせてカスタマイズされており、ユーザーがクリックしたくなるような動画が並んでいます。では、これらの動画は一体どのように選ばれているのでしょうか。 この仕組みは一般的に「YouTubeアルゴリズム」と呼ばれています。これは、どの動画をユーザーのおすすめ欄に表示するかを計算するシステムであり、検索結果にも大きな影響を与えます。そのため、より多くのオーディエンスへリーチしたいクリエイターにとって、アルゴリズムの仕組みを理解することは非常に価値のあることだと言
-
不等号(≠)の入力方法まとめ – Windows・Mac・スマホ・HTML対応ガイド
「等しくない」ことを表す記号「≠」は、標準的なキーボードには搭載されていないか、かなり奥まった場所に隠されていることが多い記号です。では、必要なときにどうやって入力すればよいのでしょうか?この記事では、PCからスマートフォンまで、さまざまな環境での≠の入力方法をわかりやすく解説します。デスクトップPCで不等号(≠)を入力する方法Windowsの場合:文字コード表(Character Map)を使うWindowsに標準搭載されている「文字コード表」は、あらゆる文字を選択できる便利なユーティリティです。文字コード表を開くには、「スタート」ボタンをクリックし、「プログラム」→「アクセサリ」→「システ