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

时间:2015-05-25 18:32:45

标签: java json serialization 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());
    }
});

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

builder.registerTypeAdapter(MyDate.class, (date, typeOfSrc, context) ->new JsonPrimitive(date.toString()));

但是这里eclipse告诉我

  

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

Java 8代码有什么问题?

1 个答案:

答案 0 :(得分:5)

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

这是interface abstract方法

GsonBuilder.registerTypeAdaperObject作为第二个参数。

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

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

builder.registerTypeAdapter(MyDate.class, serializer);

这样就告诉编译器你想要实现哪个SMI。