【发布时间】:2015-05-25 18:32:44
【问题描述】:
我有一个名为 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 代码有什么问题?
【问题讨论】:
-
您确定使用 Java 8 进行编译吗?
builder.registerTypeAdapter(MyDate.class, (JsonSerializer<MyDate>) (date, typeOfSrc, context) -> new JsonPrimitive(date.toString()));为我工作 -
@AlexisC。由于演员阵容(也是另一种解决方案),这很有效。
-
@Radiodef 我这么说是因为 OP 不应该有这个错误消息。使用 javac,我得到
incompatible types: Object is not a functional interface。这是有道理的,所以可能是 ECJ 消息有点误导(这不会让我感到惊讶);-)... 目标类型确实不是功能接口,但 javac 在那里更精确。 -
...但没关系。我的第一条评论有点愚蠢,如果 OP 有这个错误消息,那么他显然是在用 Java 8 编译:D
标签: java json serialization gson java-8