2016-07-29 56 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 

}