我有一个名为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代码有什么问题?
答案 0 :(得分:5)
为了用lambda替换匿名类,参数必须是单一方法接口(SMI)。
这是interface
单abstract
方法。
GsonBuilder.registerTypeAdaper
将Object
作为第二个参数。
您需要先分配您的lambda然后传入方法:
final JsonSerializer<MyDate> serializer = (date, typeOfSrc, context) -> new JsonPrimitive(date.toString());
builder.registerTypeAdapter(MyDate.class, serializer);
这样就告诉编译器你想要实现哪个SMI。