java - 为什么 Gson Preconditions 在这种情况下会失败?

标签 java android deserialization gson ormlite

我正在为类 ForeignCollection 编写反序列化程序,即 abstract ,并在 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<?>在debug模式下发现其实是false

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

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

都是假的。

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

最佳答案

事实证明我有多个错误的导入。

我不小心导入了 Gson 的 JsonDeserializer 的另一个库实现,这导致代码编译,但 instanceof 条件失败。

对吧

关于java - 为什么 Gson Preconditions 在这种情况下会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168154/

相关文章:

java - 字符串的正则表达式验证

android - 滚动时不绘制 subview ?

C++、ECS 和保存/加载

c# - 使用 ServiceStack.Text : override the CreateInstance stuff?

java抽象方法错误

java - 我的通用树实现中的泛型和子类型问题

android - 无法在 Ubuntu 中的 BQ Aquaris E5 HD 上运行 Android 应用程序

c# - 为什么 RestSharp 以不同的方式反序列化两个日期?

java - 扫描仪在 if 语句内无法正常工作

android - 搜索栏全宽使拇指不在正确的位置