簡體   English   中英

Java Serializable 和 lambda 表達式

[英]Java Serializable and lambda expressions

我需要將一個對象保存在文件中,然后稍后檢索它。 該對象本身實現了接口Serializable ,但其字段之一包含 lambda 表達式。 顯然,這算作一個沒有實現Serializable接口的字段,我得到一個java.io.NotSerializableException

我不想徹底改變我的代碼,但我不知道在這種情況下該怎么做。 有人有建議嗎?

這是復制此問題的示例代碼:

public class SerObject implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -2691834780794406081L;

public SerField field;

public SerObject(SerField field) {
    this.field = field;
}

public String stringRepresentation() {
    return this.field.name() + "\t" + field.lambda.apply(field);
}

static final String pathname = "D:\\JavaData\\file.obj";

public static void main(String[] args) {
    SerObject obj = new SerObject(new SerField("Field", (field) -> "Class is " + field.getClass().getName()  ));
    
    SerializableUtilities.saveObject(new File(pathname), obj);
    
    SerObject loadedObj = SerializableUtilities.loadObject(new File(pathname));
    System.out.println(loadedObj.stringRepresentation());
}
}

public class SerField implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -5058433150929459799L;

protected String name;

protected Function<SerField, String> lambda;

public SerField(String name, Function<SerField, String> lambda) {
    this.name = name;
    this.lambda = lambda;
}

public abstract String name() {
    return this.name;
}

}

你不能持久化一個函數——它不代表數據,它代表行為。 使用transient關鍵字來防止它在文件中持久化。

transient protected Function<SerField, String> lambda;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM