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必须是字符串
public HashMap<String, Object> getMap(){
HashMap<String,Object> stringMap=new HashMap<String,Object>();
stringMap.put("dd", "dddd");
return stringMap;//
这里把它给强制定死了类型了
Map<String,Object> stringMap=new HashMap<String,Object>();
stringMap.put("dd", "dddd");
return stringMap;
}
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,一个个把值赋进去。
很奇怪吗?
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>
楼主和我想问的是这个:为何装进容器的东西可以正常的向上转型,容器自己却不可以作泛型上的改变,向下和向上都不行。为何?
public HashMap<String, ? extends Object> getMap() {
// LZ先生 小的建议你了解下为何要用泛型 而且用之前 最好多了解下这方面的信息
// 不要因为自己的知识不够而局限了自己的想法 你想要的是可以实现的 只是你的方式不对而已
// 另祝LZ成功 分分给偶> <
HashMap<String, String> stringMap = new HashMap<String, String>();
stringMap.put("dd", "dddd");
return stringMap;
}
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
有的时候是可以的。
比如:
String[] ary = {};
List<Object> list = Arrays.<Object>asList(ary);
但即使是这样,也是需要在方法定义的时候声明类型猜想的。你也可以写出类似的代码。
你可去看看Think in java的关于集合(好像是,应该不会多于第十章)和泛型的章节。
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
// LZ先生 小的建议你了解下为何要用泛型 而且用之前 最好多了解下这方面的信息
// 不要因为自己的知识不够而局限了自己的想法 你想要的是可以实现的 只是你的方式不对而已
// 另祝LZ成功 分分给偶> <
HashMap<String, String> stringMap = new HashMap<String, String>();
stringMap.put("dd", "dddd");
return stringMap;
}你把这个粘贴进去? 看你的代码不对劲呢?<String,? extends Object>这是咋回事?
HashMap<String,Object> stringMap=new HashMap<String,Object>();
stringMap.put("dd", "dddd");
return stringMap;//
这是多态的应用。
但你从class到他的上级接口转变,这样肯定是不行的。Map转换成 HashMap,TreeMap....如果你是编译器 你知道转换成他子类的哪个吗?
是限制 限制~不是不能做 而是得让你去做 这个过程不可以被省略 假设一个售票口上面写着 180身高的可以进去 那只有180身高的可以进去(我进不去..)
但是如果换成 180身高以上的可以进去 那我就可以进去了这个泛型 我目前感觉 他就是用来限制的 限制的东西由你决定 所以<String, ? extends Object> 和 <String, Object> 表达的意思是不一样的另外 要区分开泛型所做的限制与你们目前所想的那个什么继承多态负责的地方..
泛性可以这么用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围观党党员三十三号的环境里以上代码没有问题
- Syntax error on token "?", invalid
TypeParameter
- The type parameter Object is hiding the type
Object
- The type parameter String is hiding the type
String
我认输了 你把你的JAVA文件全部粘贴出来吧 你就按照你出错的时候的粘贴 就是你现在这个错误