如何为 boolean.class/Boolean::class.javaPrimitiveType 和 Boolean



我正在尝试将此Java示例转换为Kotlin:

Gson gson = new GsonBuilder()
.registerTypeAdapter(Boolean.class, new JsonStrictBooleanDeserializer())
.registerTypeAdapter(boolean.class, new JsonStrictBooleanDeserializer())
.create();
val gson = GsonBuilder()
.registerTypeAdapter(Boolean::class.java, JsonStrictBooleanDeserializer())
.registerTypeAdapter(Boolean::class.javaPrimitiveType, JsonStrictBooleanDeserializer())
.create()

但是,它们的行为似乎并不相同。我反编译了 Kotlin 示例,似乎只注册了一个类型适配器:

(new GsonBuilder())
.registerTypeAdapter((Type)Boolean.TYPE, new JsonStrictBooleanDeserializer())
.registerTypeAdapter((Type)Boolean.TYPE, new JsonStrictBooleanDeserializer())
.create();

在 Kotlin 中为盒装布尔值和原始布尔值注册类型适配器的正确方法是什么?

您拥有的Boolean类的两种用法都被编译为基元布尔类型。除了javaPrimitiveType之外,您还需要使用javaObjectType,如下所示:

val gson = GsonBuilder()
.registerTypeAdapter(Boolean::class.javaObjectType, JsonStrictBooleanDeserializer())
.registerTypeAdapter(Boolean::class.javaPrimitiveType, JsonStrictBooleanDeserializer())
.create()

这将导致第一次调用使用Boolean.class,第二次调用使用Boolean.TYPE(基元booleanClass(。

相关内容

  • 没有找到相关文章

最新更新