2009-12-24 21 views
0

我一直在使用矢量,並且非常熟悉它們。我聽說ArrayLists更快更靈活。我是新使用ArrayListsJava Generics。我目前使用它們如下,接收有關參數化的警告(我想我所做的,宣佈他們<String>正確使用Arraylist和Java泛型對比矢量

ArrayList<String> arrayList = new ArrayList <String>(); 
... 
//then within a method 
arrayList.add(file.getName()); //<-This line triggers the warning. 

我在網上發現,這可以通過該方法抑制警告是可以避免的,因爲你可以請看下文。然而,這是周圍的工作,我寧願學到的ArrayList是如何工作的,並用它們正確,而不是抑制警告錯誤地使用它們。

@SuppressWarnings("unchecked") 

並請,如果有某種約定或標準關於使用ArrayLists我也很想了解這些。

編輯:我收到的警告如下:類型安全:方法add(Object)屬於原始類型ArrayList。引用泛型類型的ArrayList應該是參數

+0

您可以顯示發出警告的整個方法(或至少是聲明)嗎? – notnoop 2009-12-24 05:54:19

+0

我正在研究項目,所以我不想顯示任何專有代碼。我知道這使得事情更加困難:( – slimbo 2009-12-24 06:02:16

+0

如果你做字符串s = file.getName(); arrayList.add(s);你會得到錯誤嗎?您正在使用哪個版本的JDK? – 2009-12-24 06:04:54

回答

5

首先,請參閱您的列表(作爲變量,返回類型或參數類型)的接口的名稱,以便:

List<String> list = new ArrayList<String>(); 

它的壞的形式,以配合您的代碼到特定的實現。

矢量沒有什麼固有的錯誤。他們基本上是所有方法都同步的ArrayLists。這可能會產生不必要的開銷,但不會過分。

至於抑制未經檢查的警告,這應該只有當你指的是沒有泛型參數的列表時才需要。例如:

List list = new ArrayList<String>(); 
list.add("boo"); 

所以總是包含無論你使用一個列表作爲返回類型,變量類型或參數類型合適的泛型類型。

某些圖書館可能不會給你這個選擇,但這些應該是你唯一需要抑制未經檢查的警告的情況。

+0

我需要查看更完整的代碼片段,告訴您爲什麼會收到該警告。要麼傳遞的對象不是泛型類型,要麼使用的是通用類型(即「List list」而不是「List list」)。 – cletus 2009-12-24 06:09:44

1

什麼是警告?對我來說這似乎很好,雖然你應該真的編碼到它的接口List。

3

也許你正在將arrayList傳遞給方法簽名爲void method(ArrayList arrayList)或更好的方法void method(List arrayList)並且編譯器會觸發未經檢查的警告。你應該方法簽名更改爲void method(ArrayList<String> arrayList)或更好void method(List<String> list)

+1

我想你的意思是:「你應該改變方法簽名爲'方法(ArrayList arrayList)'」,在任何情況下,你應該改變它,正如別人所說的,是'方法(列表列表) – MatrixFrog 2009-12-24 06:21:40

+1

你的意思是'void method(ArrayList arrayList)',或者更好的'void method(列表 strs)' – 2009-12-24 06:21:48

+1

(看起來泛型參數是在答案中,但是語法高亮解釋爲HTML或者忽略了它。用'backticks'回答。) – 2009-12-24 06:23:43

0

你提到的警告來自以下行:

arrayList.add(file.getName()); 

如果file.getName()將返回比「字符串」之外的任何值,那麼你將有有一個編譯錯誤,如果「file.getName()」返回一個「字符串」,那麼就不會有任何警告。

+0

然後,我能想到的唯一可能性是在你的方法中對變量「arrayList」的解析與你在這裏顯示的不同。是否有可能在方法中使用相同名稱對變量進行了不同的聲明,並且這會掩蓋您顯示的聲明。 – sateesh 2009-12-24 06:22:55