質問

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

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

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

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

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

役に立ちましたか?

解決

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

他のヒント

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

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

retroweaverを確認できます。これはジェネリックが導入されたときに多く言及されました。個人的には経験がありません。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top