将GsonBuilder转换为Kotlin

有谁知道如何将此代码转换为kotlin

GsonBuilder builder = new GsonBuilder(); builder.setLenient(); builder.registerTypeAdapter(Date.class, new JsonDeserializer() { @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() 

…..我无法弄清楚如何转换代码

您询问的代码行可以转换为以下Kotlin代码:

 builder.registerTypeAdapter(Date::class.java, JsonDeserializer { json, typeOfT, context -> if (json.getAsJsonPrimitive().isNumber()) Date(json.asJsonPrimitive.asLong * 1000) else null }) 

首先,Kotlin支持将lambdas SAM转换为Java接口 ,但语法与Java不同。 然后,lambda中的返回与Java中的返回具有不同的含义,应该用隐式返回或带标记的返回替换。

谢谢,我已经弄清楚了..这是正确的做法,任何专家都可以发表评论

  @Provides @Singleton fun provideGson(): Gson? { val builder = GsonBuilder() builder.setLenient() builder.registerTypeAdapter(Date::class.java, JsonDeserializer { json, typeOfT, context -> if (json.asJsonPrimitive.isNumber) { Date(json.asJsonPrimitive.asLong * 1000) } else { null } }) return builder.create() } 
 val gson = GsonBuilder().apply { setLenient() registerTypeAdapter(Date::class.java, JsonDeserializer { json, typeOfT, context -> if(json.asJsonPrimitive.isNumber) { Date(json.asJsonPrimitive.asLong * 1000) } else { null } }) }.create()