【问题标题】:Convert GsonBuilder into Kotlin将 GsonBuilder 转换为 Kotlin
【发布时间】:2017-05-18 14:28:20
【问题描述】:

有谁知道如何将这段代码转换成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()

.....我不知道如何转换代码

【问题讨论】:

  • 你遇到了什么错误?

标签: java android gson kotlin


【解决方案1】:

您询问的代码行可以转换为以下 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 returnslabeled returns

【讨论】:

    【解决方案2】:

    谢谢,我已经弄明白了..是不是正确的做法,任何专家都可以评论

        @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()
        }
    

    【讨论】:

      【解决方案3】:
      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()
      

      【讨论】:

        猜你喜欢
        • 2018-11-26
        • 2023-01-29
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 2021-08-16
        相关资源
        最近更新 更多