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

Writing a serializer for Gson using Java 8

我有一个名为 MyDate 的 class 并想为 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());
    }
});

不过我想使用Java8的力量,所以尝试了

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

但是这里eclipse告诉我

The target type of this expression must be a functional interface

Java 8 代码有什么问题?

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

这是一个 interface 单一 abstract 方法

GsonBuilder.registerTypeAdaperObject 作为第二个参数。

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

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

builder.registerTypeAdapter(MyDate.class, serializer);

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