多くの書籍では、Javaの汎用消去が の理由がレガシーコードとの互換性があると言われています。ジェネリック消去とレガシーコード
私はいくつかの簡単な例を教えてください。 一般コードは古いレガシーコードと相互作用し、逆も同様です。
多くの書籍では、Javaの汎用消去が の理由がレガシーコードとの互換性があると言われています。ジェネリック消去とレガシーコード
私はいくつかの簡単な例を教えてください。 一般コードは古いレガシーコードと相互作用し、逆も同様です。
はここ型消去なしには不可能であろう例です。メソッドは、Collections.sort
として吸う古いコードを呼び出す新しいコードになります。
従来のコードとの互換性を持つということは、コンパイルせずに新しいバージョンのJVMで実行できることを意味します。ソースコードのない従来のライブラリがあるとします。これにより、Java 5で実行できるようになります。新しいコードは問題なくレガシーコードを呼び出すことができます。現在のJREとList
の同類の用途に
public static void main(String[] args) {
List<String> newList = legacyMethod();
for (String s : newList) {
System.out.println(s);
}
}
public static List legacyMethod() {
List oldList = new ArrayList();
oldList.add("a");
oldList.add("b");
oldList.add("c");
return oldList;
}
ラン古いコードは新しい使用して、古いコードになります:
まだJava 5に移植されていない古いJavaライブラリを使用します。古いコードが返される場所や、List
を受け取る場所がたくさんあります。消していないと、あなたのコードでジェネリックを使うことはできません(あなたの人生をもっとシンプルにするため)、そしてあなたのリストをパラメータとしてフレームワークに渡すことはできません。List
とList<String>
はString
とFile
と異なっています。
同様の方法で、ライブラリがリストを返すときは、それを処理するためにイテレータを使ってpre-5構文を使用するか、基本リストを一般化されたものにコピーする必要があります。
これを回避する方法があります。 SunはList
をList<Object>
と同じにするか、神が禁止するList<?>
とすることができました。しかしそれはさらに微妙な問題をもたらしていたでしょう。そこで、彼らは、少なくとも抵抗の方法に行き、コンパイル時に一般的な情報(主に)を使用することに決めました。
古い方法と新しい方法を同じ方法で使用することは、あまり良い例ではありません。 –
私はあなたの権利を推測する...方法に変更 –