2016-07-29 90 views
0

我想创建一个模拟程序堆栈的类。是否有可能使这个类serializable?我希望能够将此作为Akka消息使用。谢谢!序列化Java中的Java函数8

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队列没有实现Serializable,所以确保实现Queue的序列化对象。我不知道T是什么,但必须实现Serializable才能序列化ProgramStack类型的对象。

+0

谢谢@Javant!我认为问题是UnaryOperator 不可序列化。 – dwong

+2

UnaryOperator是一个接口。 “队列”也是如此。重要的是具体对象在某个级别上实现了'Serializable'。 (例如'LinkedList'是'Serializable'并实现'Queue')重复的答案显示了如何序列化一个lambda /函数引用。 – 4castle

+0

@dwong所有你需要做的就是在你的类声明中声明'',然后确保添加到'Queue'结构的所有对象都被转换为'(UnaryOperator&Serializable)'来声明' – 4castle

-4
import java.io.Serializable; 

public class ProgramStack<T> implements Serializable { 

// etc etc 

}