2010-06-22 51 views
0

當我將一個String對象添加到向量中時,會發生以下警告。爲什麼?java向量:添加對象時出現警告

TestCollectionsMain.java:14:警告:未經檢查]未選中呼叫至(E)添加作爲原料類型java.util.Vector中 vec.add( 「M」)的 構件;

回答

0

從Java 1.5開始,建議您使用這些方法的通用版本。

如果您堅持使用原始類型,您可以放心地忽略該警告。

順便說一句,你可能應該使用ArrayList,而不是Vector它有點快,基本上是一樣的。

這將運行,只是忽略警告。

public static void main(String [] args) { 
    Vector v = new Vector(); 
    v.add("M"); 
} 

這會更好:

public static void main(String [] args) { 
    List<String> v = new ArrayList<String>(); 
    v.add("M"); 
} 

使用泛型給你兩個好處。

1)幫助您在編譯時檢查,添加到集合的值是相同的類型。

2)幫助您在從集合中獲取值時避免投射。

但是,如果你仍然想要使用非通用版本,你可以自由地這麼做,只是忽略異常,或者如jskggz所說,只是添加一個選項(沒有編譯器錯誤):

@SuppressWarnings("unchecked") 
public static void main(String[] args) { 

給你的方法。

1

這是因爲你沒有使用泛型來聲明你的Vector。

試試這個:

List<String> vec = new ArrayList<String>(); 
vec.add("M"); 
+0

但我添加一個對象(即字符串),所以它應該接受沒有警告? – JavaUser 2010-06-22 02:36:48

+0

@JavaUser呃...沒有。每個類都從Object延伸出來;你可以添加任何東西,並使用該邏輯表示應該沒有警告。你正在調用一個採用泛型類型的方法,而不是定義該類型的實例;這是什麼觸發警告 – 2010-06-22 02:41:01

1

您可以聲明

Vector<String> vec = new Vector<String>(); 

,或者使用

@SuppressWarnings("unchecked") 

註釋你的方法的頂部,如果你真的要做到這一點。 :-)

+0

我在main()方法中做這個操作,在哪裏把這個聲明? – JavaUser 2010-06-22 02:42:52

+0

把它放在上述主要即行: @SuppressWarnings(「未登記」) 公共靜態無效的主要(字串[] args){...} 但是,請記住,在Java把鄉親們的警告在這是有原因的。 ;-) – Jubal 2010-06-22 02:46:12