我正在为 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);
}
我在 Debug模式下评估了
typeAdapter instanceof JsonDeserializer<?>
,发现它实际上是false
其实我已经评估了所有这些:
typeAdapter instanceof JsonDeserializer
typeAdapter instanceof JsonDeserializer<ForeignCollection>
typeAdapter instanceof JsonDeserializer<?>
他们都是假的。
当我将
typeAdapter
声明为 Object
类型的 ForeignCollectionsDeserializer
时,这是怎么回事,它实现了 JsonDeserializer
? 最佳答案
事实证明,我有多个不正确的导入。
我不小心导入了 Gson 的 JsonDeserializer
的另一个库实现,这导致代码编译,但 instanceof
条件失败。
smh
关于java - 为什么 Gson Preconditions 在这种情况下会失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24168154/