5

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

你能用简单的语言澄清一下吗?

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

4

4 回答 4

8

AnArrayList不是类型安全的。这意味着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>

于 2013-08-01T02:59:48.967 回答
7

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

不要使用数组列表!相反,请使用通用List<T>集合。

于 2013-08-01T02:57:35.677 回答
0

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

使用的最大缺点ArrayList是每当您想访问实际列表中的对象时都需要进行强制转换。如果列表中的任何值不是您期望的类型,那么您可能会遇到强制转换异常,并且处理该异常的代码很丑陋。

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

于 2013-08-01T03:14:49.583 回答
0

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

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

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

假设您有以下课程:

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

您甚至可以拥有 User 对象的任何子对象的 ArrayList,例如:ArrayList<User>. 您可以向此列表添加StudentAdminTeacher对象。

但是如果你不指定这个 ArrayList 保存什么类型的数据(例如:)List l = new ArrayList();,你可以在其中放置任何Object,导致它不是类型安全的。

可以在 Wikipedia 上看到一个滥用泛型的例子。

于 2013-08-01T03:29:38.347 回答