有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    你可以在这个时候推迟选角。就像下面一样,把它扔到你吃的地方

    public T getUserObject(String objName) {
      return userObjects.get(objName);
    }
    

    一般来说,设置为map的所有对象都必须有一个公共父类型(T)