spring Cann将从linkedhashmap向DummoObject施展才华。Java泛型问题
我以下面的方式使用泛型,但在getUserObject方法上会出现强制转换异常,我希望在该方法中传递类类型和键以从映射中检索对象,然后相应地键入强制转换。但出于某种奇怪的原因,我从LinkedHashMap到dummyobject得到了类cast异常。在我看来,我永远不应该在userObjects的输出中接收LinkedHashMap对象。获取(对象名)。选角时间较晚。谁能帮我解释一下吗。我可能错过了一些非常基本的东西
我看看是否将generic从T extends Object更改为DummyObject,以测试它是否正常工作。所以我认为我的通用声明有问题
Here is my InputUserObject class :
public class InputUserObject {
private Map<String, Object> userObjects = new HashMap<String, Object>();
public InputUserObject() {
super();
}
public InputUserObject(Map<String, Object> userObjects) {
super();
this.userObjects = userObjects;
}
public Map<String, Object> getUserObjects() {
return userObjects;
}
public <T extends Object> void setUserObjects(Map<String, T> userObjects) {
this.userObjects = (Map<String, Object>) userObjects;
}
public <T extends Object> void setUserObject(String key, T userObject) {
this.userObjects.put(key, userObject);
}
public <T extends Object> T getUserObject(String objName, Class<T> type){
return type.cast(userObjects.get(objName));
}
}
Here is my DummyObject class which i am using as an exemplary class:
public class DummyObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = -8068197244998284106L;
public String x="default";
public String y="0";
public DummyObject() {
super();
// TODO Auto-generated constructor stub
}
public DummyObject(String x, String y) {
super();
this.x = x;
this.y = y;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
@Override
public String toString() {
return "DummyObject [x=" + x + ", y=" + y + "]";
}
}
然后我使用下面的代码来测试代码。创建dummyobject,将其放入InputUserObject属性userObjects。然后我想用一般的方式从userObjects映射中检索它,就像我想把任何其他对象也放到userObjects映射中一样
DummyObject testX = new DummyObject("test","5");
InputUserObject testObj = new InputUserObject();
testObj.setUserObject("dummyObjectTest", testX);
DummyObject x = obj.getUserObject("dummyObjectTest", DummyObject.class);
这里是最后一行的错误 :java。util。LinkedHashMap无法强制转换为com。控制器。哇。DummyObject。我缺少一些基本的东西,但是我如何才能在hashmap中插入多个不同类型的对象,并使用泛型检索它。。我真正关心的是这个代码吗
# 1 楼答案
你可以在这个时候推迟选角。就像下面一样,把它扔到你吃的地方
一般来说,设置为map的所有对象都必须有一个公共父类型(T)