2016-07-29 10 views
0

プログラムスタックをモデル化するクラスを作成しようとしています。このクラスを作ることは可能ですかserializable?私はAkkaメッセージとしてこれを使用できるようにしたい。ありがとう! 1についてはJava 8でJava関数をシリアライズ

public class ProgramStack<T>{ 

    public final Queue<UnaryOperator<T>> programStack; 
    private T context; 

    ProgramStack(Queue<UnaryOperator<T>> programStack, T context) { 
     this.programStack = programStack; 
     this.context = context; 
    } 

    public void next() { 
     UnaryOperator function = programStack.poll(); 
     function.apply(context); 
    } 

    public boolean hasNext() { 
     return !programStack.isEmpty(); 
    } 

} 
+1

Serializableインターフェイスを実装する必要があります。こちらをご覧くださいhttps://docs.oracle.com/javase/8/docs/technotes/guides/serialization/ –

+0

ありがとう@AshwaniTiwari UnaryOperatorをシリアライズ可能にする方法がわかりません。 – dwong

+0

UniaryOperatorクラスに内部クラスがありますか? UniaryOperatorがSerializableを実装していない場合 –

答えて

1

あなたが行動を持つオブジェクトをシリアライズメソッドをシリアル化しません。とにかくこれをシリアル化できるようにするには、Serializableを実装する必要があります。メンバー全員がこれをしなければなりません。文書https://docs.oracle.com/javase/8/docs/api/java/util/Queue.htmlを見ると、キューはシリアライズ可能ではありませんので、オブジェクトが実装するキューがシリアライズ可能であることを確認してください。私はTが必要であるかどうかわからないが、これはProgramStack型のオブジェクトをシリアライズするためにSerializableを実装しなければならない。

+0

Thanks @Javant!私は問題がUnaryOperator は、シリアル化できないと思う。 – dwong

+2

'UnaryOperator'はインタフェースです。 'Queue'もそうです。重要なのは、具体的なオブジェクトがあるレベルで 'Serializable'を実装していることだけです。 (例: 'LinkedList'は' Serializable'で、 'Queue'を実装しています)重複した答えはラムダ/関数参照を直列化する方法を示しています。 – 4castle

+0

@dwongクラス宣言で 'を宣言し、' Queue'構造体に追加されたすべてのオブジェクトが '(UnaryOperator&Serializable)'にキャストすることによって宣言されていることを確認するだけです。 – 4castle

-4
import java.io.Serializable; 

public class ProgramStack<T> implements Serializable { 

// etc etc 

} 
関連する問題