シーン:
ときにオーバーロードされた関数を以下のように二つのパラメータ
ボイドFUNC(MAP <整数、文字列>マップ){}
空FUNC(地図<整数、リスト<文字列>>マップ){}
IDEは、コンパイルエラーを報告します。どちらの方法も同じ消去を持っています
回答:
Javaのジェネリックは、コンパイル時にタイプを消去した後、上記の方法になるだろうので、
空FUNC(地図マップ)
ビットを照会し、理解し、マスターするために必要ないくつかの概念があります。
https://www.jianshu.com/p/f9da328c91be
C ++でのJavaのジェネリックは異なるテンプレート:Javaのジェネリックは、「型消去」で、C ++のテンプレートは、「ジェネリックを具体化」されています。
- 型消去:ジェネリック型はコンパイル時にのみ存在する、コンパイル済みのバイトコードは、同じ一般的なタイプの1バイトコードへのすべてのマップを、一般的な情報やランニングが含まれていません。
- 一般的な具体化:コンパイルと実行の間に存在ジェネリック型、コンパイラが自動的にコードの各タイプのための一般的な種類を生成し、バイナリコードにコンパイル。
型消去の性質
ジェネリック(T) - >コンパイラ(タイプ消去) - >オリジナルタイプ(T、オブジェクトによって置き換え)
ジェネリック(XXXを拡張?) - >コンパイラ(タイプ消去) - >オリジナルタイプ(TはXXXであります代替的に)
元の型は、可変バイトコードの特定の型の型、ジェネリック情報はコンパイラ後に消去されることをいいます。
ジェネリック(XXXを拡張?) - >コンパイラ(タイプ消去) - >オリジナルタイプ(TはXXXであります代替的に)
元の型は、可変バイトコードの特定の型の型、ジェネリック情報はコンパイラ後に消去されることをいいます。
ジェネリック型消去の限界が生じ
ジェネリック型消去の一般化を減らす、特定の重要な文脈ジェネリック型にはいくつかの制限で、使用することはできません。暗黙的な型変換実行時のオーバーヘッド:ジェネリック医薬品の使用、Javaコンパイラが自動的に私たちはC ++テンプレートへの相対的な変換を、入力を支援するコードを生成するには、間違いなく、追加のパフォーマンス・オーバーヘッドをもたらしています。
オーバーロードメソッドのシグネチャの競合
クラスは、汎用インタフェースの二つの変種では達成できません
https://blog.csdn.net/abc_12366/article/details/79177328
https://blog.csdn.net/weixin_34121282/article/details/88535522 地図ジェネリック