2013-08-30 93 views
1

我有列表定義爲 - List iAmAListWithNoGenricType;對象轉換

字符串正在存儲在列表中。

我傳遞這份名單到

paramMap = populateMap(list,paramMap); 
public Map<Object,Object> populateMap(List list,Map<Object,Object> paramMap){ 
paramMap.put("key",list); 
return paramMap; 

現在做這個哈希碼被存儲在地圖的方法。

鍵= {#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

向我們展示你如何定義'itr' 而堆棧跟蹤爲好。 –

+0

你是怎麼調用populateMap方法的?你可以顯示你將實際參數傳遞給populateMap方法的代碼行。 – MansoorShaikh

+0

Iterator iterator = list.iterator(); – Ciff

回答

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的東西,但它不會導致崩潰或自行編譯錯誤。你可能在別的地方有更多的錯誤。

+0

我認爲問題的關鍵在於該列表沒有類型。 –

+0

我試過了。它不工作。 – Ciff

+0

@Ciff:你可能在代碼中有更多的錯誤,你沒有顯示,然後。 – user2357112

0
Object elemnt=itr.hasNext(); 
newList.add((String)element); 

由於Iterator.hasNext()是布爾值,因此崩潰。正確的代碼是:

while(itr.hasNext()) 
    newList.add((String)itr.next()); 

或類似的東西。

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); 
1

第一件事情,你有沒有初始化列表。其次,你應該提供你得到的例外,而不是張貼「系統崩潰」。

在這裏,您得到的元素類型爲Boolean,因爲itr.hasNext()根據列表中是否存在任何下一個元素返回true或false。然後你已經使用這個到sysout中,你可以得到classcastexception。因爲你不能將布爾值轉換爲String。

因此,使用hasNext方法,這種方法可以幫助 -

while(itr.hasNext()) { 
    //operation on list like ADD 
}