2015-03-31 44 views
-2

我無法用一個類型CAS的錯誤,我不能找出爲什麼它不斷坡平鑄造的HashMap 到陣列 ... 錯誤在Java

錯誤消息[Ljava.lang.Object; cannot be cast to [Lnet.masterthought.cucumber.json.Stuff;

它在線上彈出this.stuffs = (Stuff[]) sList.toArray();

任何人都有什麼想法是什麼問題?

public class Element { 
    private Stuff[] stuff; 

    //... getters setters 

    public function updateStuff(Stuff[] newStuff) { 
     Map<String, Stuff> stuffMap = new HashMap<String, Stuff>(); 
     for (Stuff s : this.stuffs) { 
      stuffMap.put(s.getName(), s); 
     } 

     for (Stuff s : prevStuffs) { 
      if (stuffMap.containsKey(s.getName())) { 
       stuffMap.get(s.getName()).setValue(s.getValue()); 
      } 
     } 
     ArrayList<Stuff> sList = new ArrayList<Stuff>(stuffMap.values()); 
     this.stuffs = (Stuff[]) sList.toArray(); 
    } 
} 

回答

3

sList.toArray();返回Object[]。這不能投射到Stuff[]。您可以將數組強制轉換爲超類型數組,但不是子類型。

你可以得到Stuff[],但它有點尷尬。

this.stuffs = new Stuff[sList.size()]; 
sList.toArray(this.stuffs); 

正如評論指出的那樣,你也可以這樣做:

this.stuffs = sList.toArray(new Stuff[0]); 

如果傳遞給toArray的說法是不夠大,同類型的新數組分配並返回。

+3

或更簡單:'sList.toArray(new Stuff [0]);' – assylias 2015-03-31 21:33:35

+0

@assylias謝謝你。我不知道你可以這樣做。 'toArray' API是一條全狗早餐。 – 2015-03-31 21:41:04