- - PR -
コンパイル時のクラスと実行時のクラスについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-08-08 19:14
いつもお世話になっております。
コンパイル時にクラスパスに通したクラス(Aクラス)と、 実行時に実際に参照するクラス(A'クラス)との違いについて質問です。 当然ですが、AクラスとA'クラスが異なる場合、 実行時エラーになると思います。 そのとき、何を判断基準にAクラスとA'クラスが異なる、 と判断するのでしょうか。 質問の経緯としては、 すでにAクラスでコンパイルされた他社のモジュールがあり、 A'クラスを使ってそのモジュールを使用したいと考えております。 本来ならAクラスがインタフェースであれば 自由にA'の実装を変更できるのですが、 最初の設計で具象クラスをそのまま渡してしまっており、 しかもそのクラスがバグを多く含んでいるので、 一新したいと考えているのです。 ただ、そのクラスをパスに通した他社モジュールを使用しないと 機能が満たせないので、 どうしたものか、と悩んでいます。 ご存知の方いらっしゃいましたら お教えください。よろしくお願いします。 | ||||||||
|
投稿日時: 2008-08-08 20:15
色々と意味不明です。
>当然ですが、AクラスとA'クラスが異なる場合、実行時エラーになると思います。 当然ではないですし、やりたい事とは関係ありません。 やりたい事を実現するには、バグが多く含まれているというクラスAとまったく同じパッケージ名、クラス名のクラスを作成してください。 その上で同じメソッドを全て用意しておきます。 実行時にはクラスパスの優先度の高い所に自作したクラスを置きましょう。 それだけです。 後はVMがクラスを読み込むときに作り直したクラスを読み込むことになります。 ただし、他社の作成したコードを勝手に置き換えるので、状況によっては問題が発生するかもしれません。 可能な限りはAではなくA2を作成して、使用しているところをリプレースする方がいいと思います。 Aを使っているそのモジュール自体がバギーな場合、Aを載せかえることで動かなくなるる危険性も高いでしょうね(バグがあったから動いていたというのはよくある話)。 | ||||||||
|
投稿日時: 2008-08-08 20:46
コンパイル時は、クラスパスが解決できるときに、 そのクラスパスによるクラス、メンバの参照が正しいかを検証します。 実行時は型さえ合えば、コンパイル時と同じである必要はありません。 AOPなど、動的バイトコード拡張がそのパターンです。
型階層やシグネチャが同じであれば問題ないですよ。 | ||||||||
|
投稿日時: 2008-08-11 10:51
>わたなべさん、かつのりさん
質問がいろいろと意味不明にも関わらず 回答いただきありがとうございます。 お二人の回答で、 知りたかった内容がわかったので助かりました。 ありがとうございます。 |
1