的細節,爲什麼你得到你的問題是這樣的:
- 新的ArrayList創建,空
- 所有元素類型爲String y中
- 所有元素都輸入到的StringBuffer在z
- 將新元素添加到此數組列表中。
- JVM嘗試將其轉換爲BOTH字符串和StringBuffer
- 由於「字符串」不是StringBuffer的實例,因此拋出了ClassCastException。
爲了避免這種情況,請不要爲String和StringBuffer類型輸入數組。只選擇一個。例如:
ArrayList<StringBuffer> myArrayList = new ArrayList<StringBuffer>
如果你想爲一個字符串數組列表複製到一個StringBuffer ArrayList中,你必須遍歷所有Z中的項目將它們轉換爲字符串緩衝區:
ArrayList x=new ArrayList();
ArrayList<String>y=x;
ArrayList<StringBuffer>z=new ArrayList<StringBuffer>();
for(String s : y)
z.add(new StringBuffer(s));
原因是StringBuffer沒有擴展String。造成問題的原因是您無法投射字符串,比如說「str」指向StringBuffer,即您無法執行StringBuffer s = (StringBuffer)"str";
。
要將ArrayList x
投射到ArrayList<T>
,所有x
元素必須擴展或成爲T
的實例。
另外,您應該儘可能使用泛型類型。如果你不知道會是什麼(例如)在列表中,使用方法:
ArrayList<?> x = new ArrayList<?>();
如果你知道更多一點,比如,這將是另一個類的子類,使用 ArrayList<? extends T>
或ArrayList<? implements T>
。這將幫助您避免將來的ClassCastExceptions。
你想達到什麼目的? – AlanFoster 2012-08-05 15:42:17
請不要在使用StringBuilder時使用StringBuffer。 – 2012-08-13 07:58:12