Date: Sun, 27 Jun 99 20:58:08 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:26304] Re: interface =?ISO-2022-JP?B?GyRCJE43UT41GyhC?= To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199906271155.UAA15763@cafe.muraoka.info.waseda.ac.jp> 首藤です。 > 例えば、java.io.ObjectOutputStream#writeObject は、 > public void writeObject(Serializable obj) { > となっているべきである。 > > と言いたかったのですが、 (略) > で、実際には、java.io.ObjectOutputStream#writeObject は、 > public void writeObject(Object obj) > となっていて、上のようにはなっていないのですが、なぜでしょう? instanceof の是非は置いておいて この場合 (writeObject()) に限った説明として… writeObject(Serializable obj) となっていると、 writeObject に引数として配列を渡せないから。 writeObject には配列も渡したいが、配列は Serializable のサブタイプではない。 …などと書こうと思ったのですが、なんとまあ、これは嘘でした。 配列のインスタンス instanceof java.io.Serializable 配列のインスタンス instanceof java.lang.Cloneable は true になります。知りませんでした。 「配列オブジェクト instanceof 非配列型」では java.lang.Object java.lang.Cloneable java.io.Serializable が特別扱いされるのですね。 java.lang パッケージに含まれていない Serializable が ここまで特別扱いされるのはなんとも気持ち悪いです。 もし JDK 1.0 が出て来た時点で Core API にシリアライザが入っていたら、 interface Serializable は java.lang パッケージに入っていただろうか? SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp