Arraylist是类型安全还是强类型?

时间:2013-08-01 02:55:01

标签: .net arraylist strong-typing typesafe

我不知道“强类型”和“类型安全”之间究竟有什么区别!

请您用简单的语言澄清一下吗?

假设我们正在使用Arraylist,但我无法断定它是类型安全的还是强类型的。或者我们可以将它们用作两者。?

4 个答案:

答案 0 :(得分:8)

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>

答案 1 :(得分:7)

类型安全和强类型是加载的短语,因此很难让各地的程序员确定精确的定义。但至少有足够的共识表明,ArrayLists在各方面都

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

答案 2 :(得分:0)

ArrayList数据结构不是类型安全的,也不是强类型的。您无法保证ArrayList中的对象类型,因此所有内容都存储为Object,类似于对象存储在ASP.NET的Session缓存中的方式。

使用ArrayList的最大缺点是,只要您想要访问实际列表中的对象,就需要进行转换。如果列表中的任何值不是您期望的那种类型,那么您可能会获得转换异常,并且处理这些代码只是丑陋。

尽可能使用泛型,List<T>是与ArrayList数据结构最接近的泛型类型。

答案 3 :(得分:0)

我不确定我理解你的问题。

“强/弱类型”是一种编程语言的质量。 Java是强类型的,这意味着它具有严格的语法,并且它可以在编译时在代码中发现问题,然后错误使其成为运行时。

但是,Java可能并不完全是类型安全的(我不确定确切的答案)。它允许泛型,这意味着你可以创建一个字符串的ArrayList(ArrayList<String>),整数的ArrayList(ArrayList<Integer>),布尔的ArrayList(ArrayList<Boolean>)。 ArrayList<T>表示您可以将<T>替换为任何对象。 ArrayList<? extends T>表示您可以替换任何扩展T的A,B,C,马铃薯等。

假设您有以下课程:

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

您甚至可以拥有User对象的任何子级的ArrayList,例如:ArrayList<User>。 在此列表中,您可以添加学生管理教师对象。

但是如果你没有指定这个ArrayList包含的数据类型(例如:List l = new ArrayList();),你可以在其中放置任何对象,导致它不是类型安全的。< / p>

仿制药滥用的一个例子can be seen on Wikipedia