2011-08-25 59 views
0

我有一個Vector<MyClass> myvector;與大小0 - 400,我想我的方法返回一個新的向量與位置0-100,如果存在。但我的代碼:用Java創建Vector的一部分

return (Vector<MyClass>) myvector.sublist(0, Math.min(myvector.size,100)); 

在返程線路上崩潰。

ERROR/AndroidRuntime(2053): java.lang.ClassCastException: java.util.Collections$SynchronizedRandomAccessList 

我在做什麼錯?我該如何解決它?

在此先感謝

+0

嗯...首先,'myvector.sublist'應該是'myvector.subList',因此代碼甚至不應該編譯。 – Jon7

回答

1

因爲子列表返回一個列表不是矢量

4

Vector<MyClass>.subList()返回List<MyClass>List<MyClass>無法轉換爲Vector<MyClass>

通常建議您應該儘可能使用引用到接口的類型,而不是引用到具體類型。遵循這個建議避免了這種難題。

3

Vector.subList的返回類型不一定是Vector類,而是List的實現。您可以通過以下方式解決此問題:

return new Vector<MyClass>(myvector.subList(0, Math.min(myvector.size(), 100))); 

編輯:感謝斯捷潘和史蒂夫注意到不必要的條件。

+0

爲什麼if/else不只是返回新的向量(myvector.subList(0,Math.min(myvector.size(),100))); ? –

+0

@Stjepan Rajko最初當我寫這篇文章的時候,我認爲'myvector.size()== 0'的情況會產生一個錯誤 - 但看起來更接近,事實證明情況並非如此。我想我可以藉口可讀性,但這將有點瘦;-) –

+1

大小將永遠不會小於0,所以'返回新的向量(myvector.subList(0,Math.min(myvector.size (),100)));'永遠不會被執行。 –

2

子列表返回一個列表,如果你想這樣做,你將不得不這樣做:

new Vector(myList);