準拠モードについて質問があります。 基本的なJavaクラス(例えばProperties)を拡張し、JDK5でコンパイルしてjarファイルにパッケージ化したクラスではどうなりますか?今私はJDK 6でコンプライアンスモード5でビルドされたプロジェクトでこのjarを使用します。 誰かがJDK6プロジェクトのクラスで新しいメソッドstringPropertyNames()を使用できるようになりましたか?準拠モードとオーバーライドメソッド
答えて
これは、JRE 6 JVMでプロジェクトを実行している限り、です。また、プロジェクトをJava 1.5に準拠してコンパイルする必要はありません。つまり、プロジェクトをコンパイルするときに、-source 1.5
または-target 1.5
のオプションを使用する必要はありません。一方、
java.lang.NoSuchMethodError:B.stringPropertyNames()Ljava/util/Set;
で失敗します。
実行時に発生することは、JVMが対応する実行バイトコードをProperties.stringPropertyNames()
で検索していることです。 JRE 6上で実行している場合、そのようなコードは存在します(コンパイルでどのオプションが使用されたかにかかわらず)。 JRE 5で実行しているときは、存在しません。
私はあなたが提案したシナリオを確認:
B.java:
public class B extends Properties {
public B() {
setProperty("a", "aaa");
setProperty("b", "bbb");
}
}
C.java:
public class C {
public static void main(String[] args) {
B b = new B();
System.out.println(b.stringPropertyNames());
}
}
は、次の出力はどちらか、JDK 6でコンパイルし、同じようになりました-source 1.5
および/または-target 1.5
を使用するかどうかを指定します。 JVM 6上
出力:
[b, a]
JVM 5の出力:
Exception in thread "main" java.lang.NoSuchMethodError: B.stringPropertyNames()Ljava/util/Set;
at C.main(C.java:17)
それでは、なぜ全くのコンパイルに-source
と-target
を使うのか?
This siteは、-source
オプションを使用すると、指定したリリースより後のリリースの特定の機能が使用されている場合にコンパイラを失敗させることが簡単に説明されています。たとえば、-source 1.4
は、ジェネリックを使用しないようにします(実行時にのみ失敗する)。
-target
のオプションは、official docsに従って、他の(以前の)JVMでコンパイル済みコードを実行できるようにします。たとえば、JDK 6を使用してコードをコンパイルしても、JVM 5で実行する必要がある場合は、コンパイル時に-target 5
を使用します。私がしなければ、私はjava.lang.UnsupportedClassVersionError: Bad version number in .class file
を得るでしょう。
私はあなたが答えに圧倒していない願っています。それは-sourceオプションよりも高い-targetオプションを設定する意味がないので)...
- 1. フォームのターゲット属性厳密な準拠と準拠モード
- 2. MySQL WEEK()がISO 8601準拠のモード
- 3. メンバシッププロバイダとHIPAA準拠
- 4. Pythonの標準ライブラリでオーバーライドメソッド
- 5. WS-I準拠モードでWebサービスクライアントを生成する
- 6. IE8準拠モードで隣接div間の奇妙なギャップ
- 7. Google Maps APIの厳密なモードへの準拠
- 8. Dev ExpressスタイリングとHTML5準拠
- 9. fo:ブロックコンテナとFOP準拠
- 10. Adobe FlexとADA準拠
- 11. Android javax.net.sslとFIPS準拠openSSL
- 12. Hipaa ASP.NET準拠
- 13. スウィフトプロトコル準拠
- 14. jQuery XHTML準拠
- 15. NSCodingに準拠
- 16. コード準拠エラー
- 17. W3C準拠WYSIWYG?
- 18. KVC準拠テスト
- 19. Heroku HIPAA準拠
- 20. BLE準拠テスト
- 21. AVR-GCCの標準準拠
- 22. RESTful準拠設計
- 23. セクション508準拠Gridview
- 24. CBCentralManagerDelegateプロトコルに準拠
- 25. ASP.Net DataList HTML5準拠
- 26. Googleエンドポイントhipaa準拠
- 27. 準拠輸出TestFlight?
- 28. Webpackバンドルライセンスの準拠?
- 29. Google Cast IPV6準拠?
- 30. JavascriptイベントW3C準拠
はありません、あなたの答えは非常に良い:-)でしたか? – lrxw
あなたはそうです。コンパイルされたコードがJRE X( '-target X')上で実行されるように指定されている場合、JavaリリースX(' -source X-1')からの機能の使用を妨げることはありません。 – yair
ありがとうalot :-) – lrxw