对象转换

时间:2013-08-30 07:04:15

标签: java list object

我的列表定义为 - 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());

但是系统崩溃了。

出路是什么?

4 个答案:

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