EeBlog(テクニカルブログ) :Javaワンポイント

第34 回 コレクションの動的な型保証

今回のテーマは「コレクションの動的な型保証」です。

コレクションの要素に対して、コンパイル時に、つまり静的に型保証をするのは、ジェネリックスです。 しかし、実はジェネリックスのみで完全にコレクションの要素の型を保証することはできません。 以下のソースでは、要素がInteger型のListにObject型が追加されています。

(さらに…)

第33回 直列化と継承

新年あけましておめでとうございます。 今年もJavaワンポイントをよろしくお願いします。

今回のテーマは「直列化と継承」です。

Javaの継承では、サブクラスのインスタンスを作成する際に、まずスーパークラスのコンストラクタが呼ばれます。 では、サブクラスが直列化可能かつスーパークラスが直列化不可能な状況で直列化をしたら、どうなるのでしょうか。

実際の動きを、サンプルで確認していきましょう。 今回、AbstractSportsという抽象クラスにplaceフィールドを作りました。 抽象クラスに対してnew演算子は使えないので、抽象クラスにコンストラクタがあるのを奇妙に思うかもしれませんが、サブクラスを生成するために必要なのです。

(さらに…)

第32回 直列化のカスタマイズ

今回のテーマは「直列化のカスタマイズ」です。

前回、直列化不可能な参照型のフィールドにtransientというフィールド修飾子をつけることで、そのフィールドが直列化の対象外となるという話をしました。 しかし、直列化不可能という理由でtransientをつけたフィールドに対しても、状態を保存しておきたいという場合があります。 このような場合に対応するために、今回は直列化の際に特別な働きをするメソッドを学びます。 具体的には、以下のシグネチャを持つメソッドです。

private void writeObject(java.io.ObjectOutputStream out) throws IOException;

private void readObject(java.io.ObjectInputStream in) throws

IOException,ClassNotFoundException;

(さらに…)