我的列表定义为 - List iAmAListWithNoGenricType;
字符串存储在列表中。
我将此列表传递给
的方法 paramMap = populateMap(list,paramMap);
public Map<Object,Object> populateMap(List list,Map<Object,Object> paramMap){
paramMap.put("key",list);
return paramMap;
现在正在做这个哈希码存储在Map中。
key = {#code,#code......}
我试过这些: -
List<String> newList = new ArrayList<String>();
for(String item:list){
newList.add(item);
}
并尝试将对象转换为字符串,但一切都失败了。 用户迭代器也是这样的: -
Object element=itr.hasNext();
newList.add((String)element);
此外,
newList.add(item.toString());
但是系统崩溃了。
出路是什么?
答案 0 :(得分:1)
首先,您尚未初始化列表。其次,您应该提供您正在获取的异常,而不是发布“系统崩溃”。
在这里,你有一个类型为Boolean
的元素,因为itr.hasNext()
返回true或false,基于列表中是否存在任何下一个元素。然后你将它用于sysout,你可以获得classcastexception
。因为你不能将Boolean转换为String。!
因此以这种方式使用hasNext
方法可能有所帮助 -
while(itr.hasNext()) {
//operation on list like ADD
}
答案 1 :(得分:0)
for (Object o : list) {
newList.add((String) o);
}
请注意,如果可能的话,你不应该有一个没有类型参数的列表。
在这次尝试中:
List<String> newList=new ArrayList<String>();
for(String item:list){
newList.add(item);
}
Java似乎list
的静态类型元素是Object
。您无法在没有强制转换的情况下将这些变量分配给String
变量,因此Java拒绝允许您的代码。
在这次尝试中:
Object elemnt=itr.hasNext();
newList.add((String)element);
hasNext
没有返回下一个元素。如果列表中有更多元素要迭代,则返回true
。它返回的布尔值被自动装箱到Boolean
并存储在elemnt
中,然后将Boolean
转换为String
的尝试失败。
在这次尝试中:
newList.add(item.toString());
toString
不是你如何向静态类型String
投射你知道String
的内容,但它不会导致崩溃或编译错误通过它自己。你可能在其他地方遇到了更多错误。
答案 2 :(得分:0)
Object elemnt=itr.hasNext();
newList.add((String)element);
这会崩溃,因为Iterator.hasNext()
是一个布尔值。正确的代码是:
while(itr.hasNext())
newList.add((String)itr.next());
或类似的东西。
答案 3 :(得分:0)
修改代码如下:如果要从方法返回相同的地图,则无需将地图传递给方法。
public Map<Object,Object> populateMap(List list){
Map<Object,Object> paramMap = new HashMap<Object,Object>();
if(list != null & list.size() > 0){
int key = 1;
for(Object obj : list){
paramMap.put(("Key"+key), obj);
key++;
}
}
return paramMap;
}
像这样调用你的方法:
Map<Object,Object> paramMap = populateMap(list);