- - PR -
特集「私がJavaからC#に乗り換えた10の理由」について
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-27 21:12
確かにJava言語仕様はfinalizeが呼び出されるタイミングについて ある程度VMの実装に委ねていますが、 オブジェクトが強到達可能である間にfinalizeメソッドを呼ぶことは認めていません。 言語仕様に従えば、inner class のインスタンスへの参照を持っている限り、 enclosing instanceへは(直接の参照を持っていなくても)強到達可能なはずです。 それなのに、enclosing instanceのfinalizeメソッドが呼ばれてしまうのは 問題ですよね。 # ここで問題にしているのは「Java言語仕様で定められた通りの挙動を # 示すかどうか」です。finalizeメソッドの中にどのような処理を記述しているのか # については一切関知しません。単に、 # System.out.println(); # とだけ書かれたfinalizeメソッドでも、挙動が変わることに違いはありません。
シリアライズでは、そんな単純な話にはなりません。 たとえprivateと宣言されている変数でも、勝手に削除すると 互換性に影響することがあります。 http://java.sun.com/j2se/1.4/ja/docs/ja/guide/serialization/spec/version.doc7.html
いえ、別に構いませんよ。 ただ、ちょっとスレ違いの話題になってるかも… | ||||||||||||||||
|
投稿日時: 2003-07-29 23:32
確かに、それだとJava言語仕様に反しますね(でも、実害が思いつかないなあ。互換性確保の安全策をとったと考えるべきか……)。
結構クワッとくる仕様ですね。Serializationと聞くとどうしても「永続化」というイメージがあるのだけれど、あくまで一時的なデータのやり取り用ということでしょうかね。
詳しい説明ありがとうございました。非常にためになります。 # 確かに元の記事からずいぶんずれてしまいましたね。 # このスレッドも終焉を迎えたようですので、ご勘弁を | ||||||||||||||||
