4

私はジェネリックが大好きで、できる限りジェネリックを使用しています。時々、古いJVM(5.0より前)で実行する必要がある別のプロジェクトでクラスの1つを使用する必要があり、JavaME(ジェネリックも許可されていない)またはMicrosoft J#(非常に貧弱です)で実行する必要がありますジェネリックのサポート)。

現時点では、すべてのジェネリックを手動で削除しています。つまり、多くのキャストも挿入しています。

ジェネリックはコンパイル時のみであると言われ、ジェネリック コードのすべての部分が非ジェネリック コードに自動的に変換される可能性があるため、これを実行できるツールがあるかどうか疑問に思います。

そのようなツールがない場合、他にどのように問題を解決できますか? ジェネリックの使用を完全にやめるべきですか?

バイトコードの互換性に関する回答は既にあります。何らかの理由でソース コードの互換性が必要な場合はどうすればよいですか?

4

4 に答える 4

5

このようなことを実現するには、 Retroweaverなどを使用する必要があります。この質問に対する他の回答は、少し誤解を招くものです。ジェネリックは、以前のバージョンと互換性のあるバイトコードですが、完全でjava.lang.reflect.Typeはありません (信じられない場合は参照してください)。また、バイトコード バージョン属性の問題があり、1.5 に対してコンパイルされたクラスが以前のバージョンで実行できなくなります。Retroweaver は両方の問題を回避しながら、注釈や列挙型などの他の Java 5 機能も有効にします。

于 2008-11-22T20:07:57.573 に答える
2

Netbeans (使用している IDE についてはわかりません) では、ソースコードの互換性を設定された Java バージョンに設定できます - ジェネリックをサポートするバージョンに設定するだけです。既に投稿されているように、ジェネリックは古い JVM / JRE バージョンと互換性のあるバイトコードであるため、そのまま使用できることを願っています。

于 2008-11-22T18:31:28.783 に答える
2

私の知る限り、Java 5 はJava 1.4 とバイトコード互換ではありません。つまり、Java 5 でコンパイルされたクラスを以前の VM で使用することはできません。

レトロウィーバーを確認できます。これは、ジェネリックが導入されたときに多く言及されました。私は個人的にそれについての経験はありません。

Googleに尋ねましたか?私の検索結果はhttp://www.publicobject.com/glazedlists/documentation/Generics_and_Java_1.4_with_one_codebase.pdfで、これは非常に興味深いアプローチのようです。

于 2008-11-22T20:07:10.353 に答える
-5

バイトコードと互換性があり、古いインタープリターですぐに動作するはずです。

于 2008-11-22T18:27:50.473 に答える