2013-08-01 38 views
5

我不知道「強類型」和「類型安全」之間究竟有什麼區別!Arraylist是類型安全還是強類型?

請您用簡單的語言說明一下嗎?

假設我們使用ArrayList的,但我無法斷定它是類型安全或強類型。或者我們可以將它用作兩者。?

+0

請注意,「強類型」通常適用於編程語言,而「類型安全」可能來自「類型安全集合」短語... –

回答

6

ArrayList不是類型安全的。這意味着是ArrayList可分配任何類型的值:

ArrayList myList = new ArrayList(); 
myList.Add("this is a string"); 
myList.Add(19); //Notice that this is an int, but it doesn't throw an error! 

這是一個問題,因爲當你去使用列表,你不知道這是在列表中的類型。發生錯誤的可能性非常高。

避免使用ArrayLists!改爲使用通用列表,例如List<T>

6

類型安全的,強類型的裝載短語,使得它很難讓程序員處處​​牽制一個確切的定義。但至少有足夠的共識來說明ArrayLists在任何重要的方面都不是既不是

不要使用的ArrayList!而是使用通用List<T>集合。

+0

你的意思是arraylist既不是TypeSafe也不是強類型 –

+0

我的意思是它不會對存儲在集合中的項目執行任何操作。 –

+0

但總之結論是一樣的。因爲沒有TypeSafe也沒有強類型 –

0

ArrayList數據結構不是類型安全的,也不是強類型的。您無法保證ArrayList中的對象類型,因此所有內容均以Object的形式存儲,與ASP.NET中Session緩存中的對象存儲方式類似。

最大的缺點使用ArrayList是一個需要發生時,你想獲得訪問對象的實際列表鑄造。如果列表中的任何值不是您期望的類型,那麼您可能會獲得轉換異常,並且處理這些代碼只是非常糟糕。

使用盡可能仿製藥,與List<T>是最接近的泛型類型的ArrayList數據結構。

0

我不知道我理解你的問題。

「強/弱類型」是一種編程語言的質量。 Java是強類型的,這意味着它有嚴格的語法,並且它可以在編譯時在你的代碼中發現問題,然後錯誤使它運行時間。儘管(我不確定確切的答案),Java可能並不完全是類型安全的。它允許使用泛型,這意味着您可以創建一個字符串ArrayList(ArrayList<String>),整數ArrayList(ArrayList<Integer>),布爾ArrayList(ArrayList<Boolean>)。 ArrayList<T>表示您可以用<T>替換任何對象。 ArrayList<? extends T>意味着你可以使用任何A,B,C,土豆等,擴展T.

假設你有下面的類替代:

class Admin extends User { 
    //Stuff 
} 
class Student extends User { 
    //Stuff 
} 
class Teacher extends User { 
    //Stuff 
} 

你甚至可以擁有的任何兒童的ArrayList用戶對象,例如:ArrayList<User>。 對於此列表,您可以添加學生,管理員教師對象。

但是,如果您不指定此ArrayList包含的數據類型(例如:List l = new ArrayList();),則可以將任何對象放在其中,使其不是類型安全的。

泛型濫用的一個例子can be seen on Wikipedia

+1

完美,但我認爲我的問題非常清楚。泛型是我們用於類型安全實現的方式,但是Arraylist在其基礎中,既不是類型安全的,也不是強類型。這是真的嗎? –