さまざまな言語(コードページ)が関係するシナリオ(たとえば、日本語をサポートするWindows)を検討します。マルチバイト文字を考えてください。コンパイラーがすべての言語をサポートする必要があると常に想定しない限り、8ビットASCII用に最適化される可能性があります。
SOM(Forman、Conner、Danforth、およびRaper、OOPSLA '95の議事録)のリリース間バイナリ互換性のフレームワーク内で、Javaプログラミング言語のバイナリは、作成者が特定するすべての関連する変換の下でバイナリ互換性があります(いくつかの注意点があります)インスタンス変数の追加に関して)。それらのスキームを使用して、Javaプログラミング言語がサポートするいくつかの重要なバイナリ互換の変更のリストを次に示します。
•既存のメソッド、コンストラクター、および初期化子を再実装してパフォーマンスを向上させます。
•メソッドまたはコンストラクターを変更して、入力で値を返すようにしました。以前は、通常は発生しないはずの例外をスローしたり、無限ループに入ったり、デッドロックを引き起こしたりして失敗しました。
•既存のクラスまたはインターフェイスに新しいフィールド、メソッド、またはコンストラクターを追加します。
•クラスのプライベートフィールド、メソッド、またはコンストラクターを削除する。
•パッケージ全体が更新されると、パッケージ内のクラスおよびインターフェースのデフォルト(パッケージのみ)アクセスフィールド、メソッド、またはコンストラクターが削除されます。
•既存の型宣言のフィールド、メソッド、またはコンストラクターを並べ替える。
•メソッドをクラス階層の上位に移動します。
•クラスまたはインターフェイスの直接スーパーインターフェイスのリストを並べ替えます。
•型階層に新しいクラスまたはインターフェイス型を挿入します。
この章では、すべての実装で保証されるバイナリ互換性の最小標準を指定します。Javaプログラミング言語は、互換性のあるソースからのものであることがわかっていないが、ここで説明する互換性のある方法でソースが変更されているクラスとインターフェイスのバイナリが混在している場合に互換性を保証します。アプリケーションのリリース間の互換性について説明していることに注意してください。Java SEプラットフォームのリリース間の互換性についての説明は、この章の範囲を超えています。