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代码有什么问题?
为了用lambda替换匿名类,参数必须是单个方法接口(SMI).
这是一个interface具有单一abstract方法.
GsonBuilder.registerTypeAdaper将Object第二个参数作为第二个参数.
您需要首先分配您的lambda然后传入方法:
final JsonSerializer<MyDate> serializer = (date, typeOfSrc, context) -> new JsonPrimitive(date.toString());
builder.registerTypeAdapter(MyDate.class, serializer);
Run Code Online (Sandbox Code Playgroud)
这样您就可以告诉编译器您想要实现哪个SMI.
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |