public HashMap<String, Object> getMap(){
HashMap<String,String> stringMap=new HashMap<String,String>();
stringMap.put("dd", "dddd");
return stringMap;//这里报错:Type mismatch: cannot convert from HashMap<String,String> to HashMap<String,Object>
}getMap()是个简单的方法,希望它返回一个map,并规定其中key用字符串,值可以是任意对象,可是真的放任意对象例如字符却报错!我怎么可以实现这个目标呢?即规定Map的key必须是字符串

解决方案 »

  1.   


    public HashMap<String, Object> getMap(){
            HashMap<String,Object> stringMap=new HashMap<String,Object>();
            stringMap.put("dd", "dddd");
            return stringMap;//
        
      

  2.   

     HashMap<String,String> stringMap=new HashMap<String,String>();
    这里把它给强制定死了类型了
      

  3.   

    你返回的是HashMap<String, Object>类型,你定义的是HashMap<String,String> 当然会报错
      

  4.   

    public Map<String, Object> getMap(){
            Map<String,Object> stringMap=new HashMap<String,Object>();
            stringMap.put("dd", "dddd");
            return stringMap;
        }
      

  5.   

    sun为什么要规定泛型类型作为返回值时不可以自动向上转型?
      

  6.   

    看我实际的代码:public Map<String,Object> getMap(){
        Map<String,ComponentParameter> paramMap=BeanFactory.getComponent(componentId).getParamList();
        //这里的类型参数ComponentParameter改为Object上面一句会出错,去掉类型参数则下面的map遍历会出错
        for(Map.Entry<String, ComponentParameter> entry:paramMap.entrySet()){
    ComponentParameter cp=entry.getValue();
            //其它
        }
        return paramMap//这里会出错
    }我不能按大家说的改为Object,会出错,去掉类型参数也会出错,什么也不改也会出错,除非新建一个Map,一个个把值赋进去。
    很奇怪吗?
      

  7.   

    java.util.Map<String, Object> map = new java.util.HashMap<String, Object>();
    map.put(new String(), new String());
    java.util.Map<Object, Object> map2 = map;
    //Type mismatch: cannot convert from Map<String,Object> to Map<Object,Object>
    楼主和我想问的是这个:为何装进容器的东西可以正常的向上转型,容器自己却不可以作泛型上的改变,向下和向上都不行。为何?
      

  8.   


    public HashMap<String, ? extends Object> getMap() {
    // LZ先生 小的建议你了解下为何要用泛型 而且用之前 最好多了解下这方面的信息
    // 不要因为自己的知识不够而局限了自己的想法 你想要的是可以实现的 只是你的方式不对而已
    // 另祝LZ成功 分分给偶> <
    HashMap<String, String> stringMap = new HashMap<String, String>();
    stringMap.put("dd", "dddd");
    return stringMap;
    }
      

  9.   

    这个写法第一次见呢!但是不行啊!报很多错:
    Multiple ers at this line
    - Syntax error on token "?", invalid 
     TypeParameter
    - The type parameter Object is hiding the type 
     Object
    - The type parameter String is hiding the type 
     String
      

  10.   

    目前的jdk还不支持这样的自动转型。
    有的时候是可以的。
    比如:
    String[] ary = {};
    List<Object> list = Arrays.<Object>asList(ary);
    但即使是这样,也是需要在方法定义的时候声明类型猜想的。你也可以写出类似的代码。
    你可去看看Think in java的关于集合(好像是,应该不会多于第十章)和泛型的章节。
      

  11.   


    public <String,? extends Object> HashMap<String, Object> getMap(){
    HashMap<String,String> stringMap=new HashMap<String,String>();
    stringMap.put("dd", "dddd");
    return stringMap;
    }完全按您的代码写的,在eclipse中两处有标红的错误提示,jdk是1.5
      

  12.   

        public HashMap<String, ? extends Object> getMap() {
            // LZ先生 小的建议你了解下为何要用泛型 而且用之前 最好多了解下这方面的信息
            // 不要因为自己的知识不够而局限了自己的想法 你想要的是可以实现的 只是你的方式不对而已
            // 另祝LZ成功 分分给偶> <
            HashMap<String, String> stringMap = new HashMap<String, String>();
            stringMap.put("dd", "dddd");
            return stringMap;
        }你把这个粘贴进去? 看你的代码不对劲呢?<String,? extends Object>这是咋回事?
      

  13.   

     public HashMap<String, Object> getMap(){
            HashMap<String,Object> stringMap=new HashMap<String,Object>();
            stringMap.put("dd", "dddd");
            return stringMap;//
        
      

  14.   

    .......你 什么意思?就把方法变成public HashMap <String, ? extends Object> getMap()就可以了么..
      

  15.   

    感谢楼上几位的指点,目前确定的是不能这么写,应该怎么写。但我还想知道Sun为什么要做这个限制,是出于什么方面的考虑?
      

  16.   

    Map m = new HashMap();
    这是多态的应用。
    但你从class到他的上级接口转变,这样肯定是不行的。Map转换成 HashMap,TreeMap....如果你是编译器 你知道转换成他子类的哪个吗?
      

  17.   

    到底发生了什么事情 谁问的问题 问题进展怎样 我写的方法为何LZ那里会出错 别人用也出错么 难道我的IDE坏掉了?...
      

  18.   

    同样的道理  你Object 是很多类的父类。  你从String类转换为他的父类,当然不行喽。
      

  19.   


    是限制 限制~不是不能做 而是得让你去做 这个过程不可以被省略 假设一个售票口上面写着 180身高的可以进去 那只有180身高的可以进去(我进不去..)
    但是如果换成 180身高以上的可以进去 那我就可以进去了这个泛型 我目前感觉 他就是用来限制的 限制的东西由你决定 所以<String, ? extends Object> 和 <String, Object> 表达的意思是不一样的另外 要区分开泛型所做的限制与你们目前所想的那个什么继承多态负责的地方..
      

  20.   

    基类转超类是没有问题的.....
    泛性可以这么用public java.util.HashMap<String,? extends Object> getMap()
    {
      java.util.HashMap<String,String> stringMap = new java.util.HashMap<String,String>();
      stringMap.put("dd", "dddd");
      return stringMap;
    }这个假如有问题,lz发一下"? extends Object"处提示的什么.
    ----ip围观党党员三十三号的环境里以上代码没有问题
      

  21.   

    我发过了,"? extends Object"处提示:Multiple ers at this line
    - Syntax error on token "?", invalid
    TypeParameter
    - The type parameter Object is hiding the type
    Object
    - The type parameter String is hiding the type
    String 
      

  22.   


    我认输了 你把你的JAVA文件全部粘贴出来吧 你就按照你出错的时候的粘贴 就是你现在这个错误