1. ホーム

[解決済み】java.lang.IncompatibleClassChangeErrorの原因は何ですか?

2022-04-04 01:52:05

質問

JavaライブラリをJARとしてパッケージングしているのですが、多くの java.lang.IncompatibleClassChangeError メソッドを呼び出そうとすると、"s "が表示されます。これらのエラーはランダムに表示されるようです。どのような種類の問題がこのエラーを引き起こすのでしょうか?

解決方法を教えてください。

これは、クライアントコードを再コンパイルすることなく、ライブラリに互換性のないバイナリ変更を行ったことを意味します。 Java言語仕様書§13 は、そのようなすべての変更について詳述しており、最も顕著なのは、非標準の static プライベートでないフィールド/メソッドを static またはその逆。

新しいライブラリに対してクライアントコードを再コンパイルすれば、うまくいくはずです。

UPDATE: パブリック・ライブラリを公開する場合、バイナリの後方互換性というものを維持するために、互換性のないバイナリを変更することはできるだけ避けるべきです。 依存関係のあるjarを更新するだけで、理想的にはアプリケーションやビルドが壊れることはないはずです。もしバイナリの後方互換性を破らねばならないのであれば、それは 推奨 メジャーバージョン番号を増やす (例: 1.x.y から 2.0.0 へ) ことで、変更をリリースすることができます。