1

パラメータ-source 1.5および-target 1.5を使用してJavaバージョン1.6でソースをコンパイルしましたが、コンパイラはまったく文句を言いません。

それでも、メソッドが欠落しているため、アプリケーションは Java 1.5 では実行されません。もちろん、ソース コードの一部を 1.5 に準拠するように書き直すこともできますが、理解できないのは次の点です。一番下のJavaバイトコードは「前方」に準拠すべきではありませんか?

メソッドはバイトコードに変換されていませんか? 1.6 のライブラリ/メソッド (以前の String.isEmpty()) を 1.5 バイトコードにコンパイルして、すべてをアーカイブにパックすることは可能ですか?

4

5 に答える 5

6

ベースの Java ライブラリ メソッドを意味する場合は、いいえ、これらのメソッドはコンパイル時にバイト コードに変換されません。これらはすでに Sun (またはサードパーティの JVM ディストリビュータ) によってバイトコードにコンパイルされ、オペレーティング システムにインストールされています。これらは、コンパイルされたコードによって参照および使用されます。

于 2009-07-07T18:08:28.840 に答える
3

必要なコマンド ライン オプションの完全なセットは次のとおりです。

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar

(bootclasspath をマシンの設定に変更します。)

もちろん、1.6 の API 拡張は 1.5 にはありません。1.5 はサービス ライフの終了まであと少しなので、最低でも 1.6 を検討することをお勧めします。

于 2009-07-07T18:19:25.590 に答える
1

source パラメーターは、言語構文レベルでのみコンパイラーをチェックします (たとえば、source=1.4 は、ジェネリックに遭遇した場合にエラーになります) が、指定された Java バージョンで使用可能な API のみを使用するように制限することはありません。

target パラメーターは、指定されたバージョンのランタイムで使用できるコンパイラ出力クラス ファイルを作成しますが、(-source と同様に) API 準拠を検証しません。

于 2009-07-07T18:27:56.977 に答える
1

Java がネイティブ Java コードを逆方向に再コンパイルするとは思えません。したがって、1.6 で呼び出しを行うと、1.5 ではアクセスできなくなります。

于 2009-07-07T18:07:31.323 に答える
1

コンパイル対象のライブラリを古いライブラリに変更できます。Eclipse などのパッケージでは、インストールされている各 JDK が「ライブラリの選択」ウィンドウに表示され、コンパイルするライブラリを選択できます。

そうでない場合は、ant ファイルまたは CLI コンパイル コマンドでオーバーライドできるはずです。

古い JVM を対象とする場合は、これを実際に行う必要があります。そうしないと、利用できない呼び出しを使用する可能性があります。

于 2009-07-07T18:10:56.183 に答える