2011-06-28 16 views
1

直列化では、直列化したいクラスをSerializableインタフェースを実装する必要があります。それ以外の場合は、NotSerializableExceptionがスローされます。 Javaのさまざまな機能には、他にもたくさんの例があります。今、私はカスタムクラスとインターフェイスでそのようなコントロールをどのように持ち込むかを知りたいだけです。エージェントと呼ばれるインターフェースがあります。多くの異なる種類のエージェントが存在する可能性があり、それらのすべてがエージェントインタフェースを実装する必要があります。私はNodeというクラスも持っています。ノードはエージェントを作成します。エージェントが常にエージェントのインターフェイスを実装するような状況では、どうしてこのような状況でコントロールを導入するのですか。それ以外の場合は例外がスローされます。私は少し曖昧に聞こえるかもしれませんが、誰かが一般的なアイデアを私に提供できる場合は、必要に応じて詳細を提供することができます。制御されたインタフェースの実装

答えて

3

エージェントを使用するNodeメソッドがある場合は、その引数をAgentにする必要があります。

interface Node { 
    void method(Agent agent); // must be an Agent. 
    Agent returnAgent(); // must return an Agent. 
} 

シリアル化は特殊な​​ケースです。これは、直列化可能なすべての型が直列化可能であるわけではないためです。 int []のような組み込み型はシリアライズ可能ですが、シリアライズ可能は実装されていません。このタイプのチェックはコンパイラでは実行できず、実行時にのみ行うことができます。

+0

とのインタフェース? – aps

+0

コンパイラが無効な型を使用しないようにするため、例外をスローする必要はありません。 –

+0

あなたのソリューションは私のものよりもはるかに優れています。はるかにエレガント。 –

0

ノードがエージェントを作成する前にエージェントがインタフェースを実装しているかどうかを確認できます。

public class CheckForInterface 
{ 
    public static void main(String[] args) throws ClassNotFoundException 
    { 
     Class cl = (Class)Class.forName("TestImpl"); 
     Class[] itfs = cl.getInterfaces(); 

     for(Class c : itfs) 
     { 
      System.out.println(c); 
     } 
    } 
} 

import java.io.Serializable; 

public class TestImpl implements Serializable 
{ 
    public TestImpl() 
    { 

    } 
} 

これは出力します。ここで、例外をスローするようにしたjava.io.Serializable

関連する問題