Kotlinノート13-JavaとKotlinのパターン対比(二)


前に続く:Kotlinノート12-JavaとKotlinのモデルの比較(一)
Javaのパターンタイプは、パターン消去のため、実行時にパターンTのタイプにアクセスできません.
Oracleの公式サイトのドキュメントの紹介では、消去タイプとReifiable Typeについても言及されています.https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.7.Javaといえば、リストのような元のタイプ情報も保持されます.タイプ消去によってリストになりますが、リストのタイプは保持されます.
本稿では,inline関数とrefinedキーワード---を用いてパターン型Tを保持することについて主に説明する.
まず、Kotlinタイプの消去についてKotlin中国語ネットで説明します.
タイプ消去
Kotlinが汎用宣言用法のために実行するタイプセキュリティ検出はコンパイル期間のみで行われる.ランタイム汎用タイプのインスタンスは、そのタイプの実パラメータに関する情報を保持しません.そのタイプの情報を消去と呼びます.例えば、FooおよびFooの例は、Fooとして消去される.
したがって、実行時に汎用タイプのインスタンスが指定したタイプパラメータによって作成されたかどうかを検出する一般的な方法はなく、コンパイラはこのis検出を禁止します.
タイプは、foo as Listが実行時に検出できないなど、特定のタイプのパラメータを持つ汎用タイプに変換されます.高度なプログラムロジックにタイプ変換のタイプセキュリティが隠されており、コンパイラによって直接推定できない場合、この非チェックタイプ変換を使用します.コンパイラは、非検出タイプ変換に警告し、実行時に非汎用部分のみを検出します(foo as Listに相当).
汎用関数呼び出しのタイプパラメータもコンパイル期間のみで検出されます.関数ボディの内部では、タイプパラメータをタイプ検出に使用することができず、タイプをタイプパラメータに変換する(foo as T)ことも非検出である.しかしながら、インライン関数の具体化されたタイプパラメータは、呼び出し先のインライン関数ボディのタイプ実パラメータによって代入されるので、上記の汎用タイプのインスタンスと同様に、タイプ検出と変換に使用することができる.
 
以上より,タイプ検出と変換が必要な場合に,具体化されたタイプパラメータを用いることができることが分かった.
続けて書きたいと思っていたのですが、掘金でいい文章がいくつか見られたので、あまり紹介しないので、皆さん直接足を運んでください
[訳]Kotlinの独門秘籍Refied実化タイプパラメータ(前編)
Kotlinの独門秘籍Refied実化タイプパラメータ(下編)
[訳]Kotlin汎用では、タイプパラメータコンストレイントを使用するのはいつですか?