使用Java 8为Gson编写序列化程序

pri*_*ain 2 java serialization json gson java-8

我有一个自己的类,MyDate并希望为Gson编写一个序列化器.此代码有效:

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyDate.class, new JsonSerializer<MyDate>() {
    @Override
    public JsonElement serialize(MyDate date, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(date.toString());
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,我想使用Java 8的强大功能,因此尝试过

builder.registerTypeAdapter(MyDate.class, (date, typeOfSrc, context) ->new JsonPrimitive(date.toString()));
Run Code Online (Sandbox Code Playgroud)

但是这里的日食告诉我

此表达式的目标类型必须是功能接口

Java 8代码有什么问题?

Bor*_*der 5

为了用lambda替换匿名类,参数必须是单个方法接口(SMI).

这是一个interface具有单一abstract方法.

GsonBuilder.registerTypeAdaperObject第二个参数作为第二个参数.

您需要首先分配您的lambda然后传入方法:

final JsonSerializer<MyDate> serializer = (date, typeOfSrc, context) -> new JsonPrimitive(date.toString());

builder.registerTypeAdapter(MyDate.class, serializer);
Run Code Online (Sandbox Code Playgroud)

这样您就可以告诉编译器您想要实现哪个SMI.