加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么Gson Preconditions在这个实例中失败了?

发布时间:2020-12-15 04:20:42 所属栏目:Java 来源:网络整理
导读:我正在为ForeignCollection类编写一个反序列化器,它是抽象的,并在 ORMLite Android Library中提供给我.请参阅下面的代码. public class ForeignCollectionDeserializer implements JsonDeserializerForeignCollectionDeserializer { @Override public Foreig
我正在为ForeignCollection类编写一个反序列化器,它是抽象的,并在 ORMLite Android Library中提供给我.请参阅下面的代码.

public class ForeignCollectionDeserializer implements JsonDeserializer<ForeignCollectionDeserializer> {
    @Override
    public ForeignCollection deserialize(JsonElement jsonElement,Type type,JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        ...
    }
}

我也尝试过实现JsonDeserializer<?>和JsonDeserialzer(没有泛型类型)

我正在使用GsonBuilder.registerTypeAdapter来注册反序列化器.

GsonBuilder gb = new GsonBuilder();

gb.registerTypeAdapter(ForeignCollection.class,new ForeignCollectionDeserializer());
Gson gson = gb.create();

但是,registerTypeAdapter()抛出这个:

06-11 11:27:27.937: E/AndroidRuntime(15197): FATAL EXCEPTION: main
06-11 11:27:27.937: E/AndroidRuntime(15197): Process: com.myapp,PID: 15197
06-11 11:27:27.937: E/AndroidRuntime(15197): java.lang.IllegalArgumentException
06-11 11:27:27.937: E/AndroidRuntime(15197):    at com.google.gson.internal.$Gson$Preconditions.checkArgument($Gson$Preconditions.java:42)
06-11 11:27:27.937: E/AndroidRuntime(15197):    at com.google.gson.GsonBuilder.registerTypeAdapter(GsonBuilder.java:448)

我正在逐步完成代码,然后从GsonBuilder下面找到令人讨厌的部分.

public GsonBuilder registerTypeAdapter(Type type,Object typeAdapter) {
    $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer<?>
            || typeAdapter instanceof JsonDeserializer<?>
            || typeAdapter instanceof InstanceCreator<?>
            || typeAdapter instanceof TypeAdapter<?>);
    if (typeAdapter instanceof InstanceCreator<?>) {
        instanceCreators.put(type,(InstanceCreator) typeAdapter);
    }

我评估了typeAdapter instanceof JsonDeserializer<?>在调试模式下,发现它实际上是假的

其实我已经评估了所有这些:

> typeAdapter instanceof JsonDeserializer
> typeAdapter instanceof JsonDeserializer< ForeignCollection>
> typeAdapter instanceof JsonDeserializer<?>

他们都是假的.

这是怎么回事,当我将typeAdapter声明为ForeignCollectionsDeserializer类型的Object时,它实现了JsonDeserializer?

解决方法

事实证明我有多个不正确的导入.

我不小心导入了Gson的JsonDeserializer的另一个库实现,导致代码编译,但是有条理的instanceof失败.

SMH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读