1.概述
泛型:泛型是一种未知数据类型,当我们不知道用什么数据类型的时候,可以使用泛型。
2. 创建集合对象,使用泛型的好处与弊端
- 好处:
1.避免了类型转换的麻烦,存储是什么类型,取出就是什么类型。
2.把运行期(代码运行后异常)异常,提升到了编译期。 - 弊端:
1.泛型是什么类型,只能存储什么类型的数据 - 代码
public class GenericStudy {
public static void main(String[] args) {
// show01();
show02();
}
/*
* 创建集合对象,使用泛型
* 好处:
* 1.避免了类型转换的麻烦,存储是什么类型,取出就是什么类型
* 2.把运行期(代码运行后异常)异常,提升到了编译期
* 弊端:
* 1.泛型是什么类型,只能存储什么类型的数据
*/
private static void show02() {
ArrayList<String> list = new ArrayList<>();
list.add("ada");
// list.add(1); //java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String
//使用迭代器遍历list集合
Iterator<String> it =list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s+"->"+s.length());
}
}
/*
* 创建集合对象,不使用泛型
*好处:
* 集合不适用泛型,默认就是Object类型,可以存储任意类型的数据
* 弊端:
* 不安全,会引发异常
*/
private static void show01() {
ArrayList list =new ArrayList();
list.add("a");
list.add(1);
//使用迭代器遍历list集合
//获取迭代器
Iterator it = list.iterator();
//使用迭代器中的方法hostNext和next遍历集合
while(it.hasNext()){
//取出也是Object类型
Object obj =it.next();
System.out.println(obj);
//想要String类特有的方法 .length获取字符串长度;不能使用 多态Object obj ="abc"
//需要向下转型
//会抛出ClassCastException转换异常,不能把Integar类型转换为String类型
String s = (String)obj;
System.out.println(s.length());//java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String
}
}
}
网友评论