バイナリー依存性

http://eclipse.org/eclipse/development/java-api-evolution.html
な、難解な・・・
Javaバイトコードに依存性と聞くと「へ?」という感じ(というかJava最大のメリットがふっとぶ)だが、ようはこういうこと(た、たぶん):

  • クラスBはクラスAを継承。クラスAは外から見えないがクラスBは見える。
  • クラスAをクラスA1とクラスA2にリファクター。クラスA2はクラスA1を継承。
  • 最初のバージョンでコンパイルしたクラスBを使うファイルはクラスBその他クラスファイルを入れ替えたとき、継承先が見えない。(コンパイルした時のクラスは、もうないクラスAを探してしまう。)

うーん、ややこしい・・・ こんなの全部トラックできるんだろうか。 フレームワークを作る時なんかみんなどうやってるんだろう? 例えば、クラスBがActionServletとして、その上とか全部はフレームワーク内にあったとする。 変更前のバージョンのjarファイルを使ってシステムをコンパイルしたとする。 それで新しいバージョンのjarファイルと差し替えて動かすと、ClassNotFoundExceptionが投げられてしまう。 まぁ使う側は新しいバージョンが来る度に全部のクラスファイルを捨てて再ビルドをかければいい。 ただ通常これを気にするのはフレームワークを作る側なんだろうか、使う側なんだろうか? いずれにせよ、クラスファイルも慎重に取り扱う(それに継承も)必要がありそう。 注意、注意。