54

Joshua Bloch の『Effective Java』を読んでいました。

項目 17:「型を定義するためだけにインターフェイスを使用する」で、定数を格納するためにインターフェイスを使用することはお勧めできないという説明に出くわしました。以下に解説を入れておきます。

「さらに悪いことに、それはコミットメントを表しています。将来のリリースで定数を使用する必要がなくなるようにクラスが変更された場合でも、バイナリ互換性を確保するためにインターフェイスを実装する必要があります。」

ここでバイナリ互換性とはどういう意味ですか?

コードがバイナリ互換であることを示すために、誰かがJavaの例を教えてくれますか?

4

5 に答える 5

52

つまり、バイナリ互換性とは、クラスを変更したときに、それを使用するクラスを再コンパイルする必要がないことを意味します。たとえば、このクラスからパブリック メソッドまたはプロテクト メソッドを削除または名前変更した

public class Logger implements Constants {
   public Logger getLogger(String name) {
         return LogManager.getLogger(name);
   }
}

log-1.jar ライブラリから新しいバージョンを log-2.jar としてリリースしました。log-1.jar のユーザーが新しいバージョンをダウンロードすると、不足している getLogger(String name) メソッドを使用しようとするとアプリが壊れます。

また、Constants インターフェイス (項目 17) を削除すると、同じ理由でバイナリ互換性が失われます。

ただし、バイナリ互換性を損なうことなく、このクラスのプライベートまたはパッケージ プライベート メンバーを削除または名前変更できます。

于 2013-02-20T06:23:38.930 に答える
7

バイナリ互換性

Java バイナリ互換性は、クラスの変更および再コンパイルが、変更されたクラスをインポートするさらなるクラスの再コンパイルを必要としない条件を規定します。バイナリ互換性は、言語設計の新しい概念です。

Java 言語仕様 [7] では、バイナリ互換の変更について次のように説明しています。

以前にエラーなしでリンクされた既存のバイナリがエラーなしでリンクし続ける場合、タイプへの変更は既存のバイナリとバイナリ互換性があります (同様に、互換性を壊しません)。

于 2013-02-20T06:22:27.540 に答える
-3

シンプルに見せるには:

別のコンピューターで実行することを意図した同じバイナリ コードを実行できるコンピューターは、バイナリ互換性があると言われます。これは、再コンパイルが必要になる場合があるソース コードの互換性とは異なります。

バイナリ互換性は、複数のオペレーティング システムで実行されるコンピューター プログラムを開発する際の大きな利点です。

于 2013-02-20T06:16:29.170 に答える