2013-08-01 35 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在其基础中,既不是类型安全的,也不是强类型。这是真的吗? –