有谁知道如何将此代码转换为kotlin
GsonBuilder builder = new GsonBuilder();
builder.setLenient();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.getAsJsonPrimitive().isNumber()) {
return new Date(json.getAsJsonPrimitive().getAsLong() * 1000);
} else {
return null;
}
}
});
return builder.create();
然后,我试过
val builder = GsonBuilder()
builder.setLenient()
builder.registerTypeAdapter(Date::class.java,.........)
return builder.create()
.....我无法弄清楚如何转换代码
答案 0 :(得分:9)
您要询问的代码行可以转换为以下Kotlin代码:
builder.registerTypeAdapter(Date::class.java, JsonDeserializer<Date> {
json, typeOfT, context ->
if (json.getAsJsonPrimitive().isNumber())
Date(json.asJsonPrimitive.asLong * 1000) else
null
})
首先,Kotlin支持SAM conversion of lambdas to Java interfaces,但语法与Java不同。然后,lambda中的返回与Java中的返回具有不同的含义,应该替换为implicit returns或labeled returns。
答案 1 :(得分:0)
谢谢,我已经弄清楚了..这是正确的做法,任何专家都可以评论
@Provides
@Singleton
fun provideGson(): Gson? {
val builder = GsonBuilder()
builder.setLenient()
builder.registerTypeAdapter(Date::class.java, JsonDeserializer<Date> { json, typeOfT, context ->
if (json.asJsonPrimitive.isNumber) {
Date(json.asJsonPrimitive.asLong * 1000)
} else {
null
}
})
return builder.create()
}
答案 2 :(得分:0)
val gson = GsonBuilder().apply {
setLenient()
registerTypeAdapter(Date::class.java,
JsonDeserializer<Date> { json, typeOfT, context ->
if(json.asJsonPrimitive.isNumber) {
Date(json.asJsonPrimitive.asLong * 1000)
} else {
null
}
})
}.create()