java – 为什么Gson Preconditions在这个实例中失败了?
我正在为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声明为ForeignCollectionsDeserializer类型的Object时,它实现了JsonDeserializer? 解决方法
事实证明我有多个不正确的导入.
我不小心导入了Gson的JsonDeserializer的另一个库实现,导致代码编译,但是有条理的instanceof失败. SMH (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |