我有两节课:

public class Parent{
    /* Some Code */
}
public class Child1 extends Parent{
    /* Some Code */
}
public class Child2 extends Parent{
    /* Some Code */
}


我有一个HashMap<String, Parent>。使用com.google.gson.Gson我已经将此HashMap转换为Json:

HashMap <String, Parent> criterias = new HashMap <String, Parent>();
Gson gson = new Gson();
Type listOfTestObject = new TypeToken<HashMap<String, parent>>(){}.getType();
String dataCriteria = gson.toJson(criterias, listOfTestObject);


在另一个类中,我想检索此HashMap:

Gson gson = new Gson();
Type listOfTestObject = new TypeToken<HashMap<String, Parent>>(){}.getType();
HashMap<String, Parent> myMap = gson.fromJson(data, listOfTestObject);


问题是我想将HashMap的值从instanceOf Child1转换为Child1

我得到这个异常:

java.lang.ClassCastException: Parent cannot be cast to Child1


是否有解决方案?

最佳答案

扩展我的评论,如果您声明您的Map如下

Map<String , ? super Parent> map = new HashMap<String,Parent>();


你将能够


添加ParentChild1Child2值:

map.put( "key" , new Child1() );
检索这些并进行适当的转换

Child c1 = (Child1)map.get( "key" );


映射声明的通用部分应读取为:接受Parent或具有Parent作为超类的任何内容。

希望能有所帮助。

干杯,

关于java - Java下垂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25115832/

10-08 22:32