汎用消去タイプ
1638 ワード
仮想マシンには汎用オブジェクトがありません.すべてのオブジェクトは通常のクラスに属します.
JAva汎用変換の事実:
仮想マシンには汎用型はなく、一般的なクラスと方法しかありません.
すべてのタイプパラメータは、を限定タイプで置き換えます.
ブリッジ法を合成して多態を維持する
タイプセキュリティを維持するため、必要に応じて強制タイプ変換を挿入する.
(一)タイプ消去と汎用表現翻訳
仮想マシンには汎用型がないため、いつ1つの汎用型を定義してもタイプ変数は消去され、限定型に置き換えられます(無限定の変数はObject)
例1.1 Pair
Tは無限の変数なので、Objectに置き換えられます
例1.2限定タイプのタイプ消去Pair
TはComparableインタフェースを実装するクラスに限定されるため、タイプ消去後に限定されたタイプ変数Comparableが使用される
では、Pairなど複数に限定すると、Serializableを取り、ComparableのcomparareToメソッドを使用するときに強制タイプ変換を挿入します.
したがって、効率を向上させるために、ラベルインタフェース(すなわち、実現方法のないインタフェースは後ろに置くべきである).
(二)汎用表現の翻訳
仮想マシンには汎用性がないので、汎用メソッドを呼び出すと、戻りタイプが消去され、コンパイラが強制タイプ変換を挿入します.
例2.1
実は、コンパイラはgetFirst()のこのメソッド呼び出しを2つの仮想マシンの命令に翻訳しました.元のgetFirstメソッドが呼び出されます.ここではObject が返されます.返されたObjectを強制型からEmployee型に変換する
JAva汎用変換の事実:
仮想マシンには汎用型はなく、一般的なクラスと方法しかありません.
すべてのタイプパラメータは、を限定タイプで置き換えます.
ブリッジ法を合成して多態を維持する
タイプセキュリティを維持するため、必要に応じて強制タイプ変換を挿入する.
(一)タイプ消去と汎用表現翻訳
仮想マシンには汎用型がないため、いつ1つの汎用型を定義してもタイプ変数は消去され、限定型に置き換えられます(無限定の変数はObject)
例1.1 Pair
/**
* pair
* @author xiongda
* @date 2020 7 11
*/
public class Pair {
private Object first;
private Object second;
public Pair(Object first, Object second) {
this.first = first;
this.second = second;
}
public Object getFirst() {
return first;
}
public void setFirst(Object first) {
this.first = first;
}
public Object getSecond() {
return second;
}
public void setSecond(Object second) {
this.second = second;
}
}
Tは無限の変数なので、Objectに置き換えられます
例1.2限定タイプのタイプ消去Pair
/**
* Pair
* @author xiongda
* @date 2020 7 11
*/
public class Pair{
private Comparable first;
private Comparable second;
}
TはComparableインタフェースを実装するクラスに限定されるため、タイプ消去後に限定されたタイプ変数Comparableが使用される
では、Pairなど複数に限定すると、Serializableを取り、ComparableのcomparareToメソッドを使用するときに強制タイプ変換を挿入します.
したがって、効率を向上させるために、ラベルインタフェース(すなわち、実現方法のないインタフェースは後ろに置くべきである).
(二)汎用表現の翻訳
仮想マシンには汎用性がないので、汎用メソッドを呼び出すと、戻りタイプが消去され、コンパイラが強制タイプ変換を挿入します.
例2.1
Pair buddies = new Pair();
Employee buddy = buddies.getFirst();
実は、コンパイラはgetFirst()のこのメソッド呼び出しを2つの仮想マシンの命令に翻訳しました.