我是Java新手!
我的目标: 我收集了Objects,使我可以通过某个键(例如Map)保留任何类型的对象(将它们放入并从中获取)。我可以向其中添加任何类型的对象(例如,可以添加MyClass的对象)。然后,我使用GSON将这个对象序列化为JSON格式的单独字符串(然后,例如,我可以将该字符串序列化为单独的文件)。当我想找回一些对象时,我通过键从集合中请求它,集合将对应的字符串反序列化为Object对象并返回给我。然后,将其强制转换为MyClass才能使用该对象。
下面的代码跳过了集合的工作:
Gson gson = new Gson();
Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
String json = gson.toJson(myClass); //serializing to JSON
Object myClass1 = gson.fromJson(json, Object.class); //imitation of deserializing and getting object from collection
Main.MyClass myClass2 = (Main.MyClass) myClass1;
此代码的最后一个字符串引发java.lang.ClassCastException,因为“ gson.fromJson(json,Object.class);”返回类型为“ com.google.gson.internal.LinkedTreeMap”的对象
我如何实现自己的目标?
答案 0 :(得分:2)
这可能是因为当您使用gson.fromJson(json, Object.class)
时,将其强制转换为对象而不是MyClass,可能是如果使用gson.fromJson(json, MyClass.class)
然后将其强制转换为它将返回正确的值。否则,他们将创建一个简单的对象类。
答案 1 :(得分:0)
gson.fromJson(json, Object.class);
投射到LinkedTreeMap(请参见ObjectTypeAdapter.read(JsonReader in)
中的gson资料)。
尝试一下:
Gson gson = new Gson();
Object myClass = new MyClass(); //imitation of putting MyClass object to Collection
String json = gson.toJson(myClass); //serializing to JSON
Main.MyClass myClass2 = gson.fromJson(json, Main.MyClass.class);