JAVA学习:泛型的必要性
2012-08-31 21:21
316 查看
没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制类型转换都是自动和隐式的。提高代码的重用率。
综述:在使用ArrayList等集合时若不使用泛型,则可能导致程序的安全性受到威胁。如下例所示,定义猫类和狗类,分别创建一个实例,并将其放入ArrayList中,当从ArrayList中取出的动物类型与指定类型不同时,则会有异常抛出。
实例代码:
抛出类型不匹配异常:
引入泛型之后便不会出现上述问题:
泛型的好处是在编译的时候检查类型安全,并且所有的强制类型转换都是自动和隐式的。提高代码的重用率。
综述:在使用ArrayList等集合时若不使用泛型,则可能导致程序的安全性受到威胁。如下例所示,定义猫类和狗类,分别创建一个实例,并将其放入ArrayList中,当从ArrayList中取出的动物类型与指定类型不同时,则会有异常抛出。
实例代码:
import java.util.ArrayList; public class fanxing { public static void main(String[] args) { // TODO Auto-generated method stub ArrayList al = new ArrayList(); // 创建一只狗 Dog dog1 = new Dog(); Cat cat1 = new Cat(); // 放入到集合中 al.add(dog1); al.add(cat1); // 取出 // 无泛型会隐藏安全隐患(al.get(1)实际取出的是猫) Dog temp = (Dog) al.get(1); } } class Dog { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Cat { private String color; private int age; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
抛出类型不匹配异常:
引入泛型之后便不会出现上述问题:
import java.util.ArrayList; public class fanxing { public static void main(String[] args) { // 引入泛型 ArrayList<Dog> aDog = new ArrayList<Dog>(); ArrayList<Cat> aCat = new ArrayList<Cat>(); // 创建一只狗 Dog dog1 = new Dog(); Cat cat1 = new Cat(); // 放入到集合中 aDog.add(dog1); aCat.add(cat1); // 取出 // 取出符合规定类型的动物,不再存在安全隐患 Dog temp = (Dog) aDog.get(0); } } class Dog { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Cat { private String color; private int age; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
相关文章推荐
- JAVA学习之---泛型
- Java学习笔记泛型
- 【Java学习笔记】14.集合框架和泛型
- java学习知识整理 2 泛型
- 【笨鸟先飞】Java重新学习日记8---泛型的深入学习
- java反射学习笔记(4)----通过反射来了解泛型的本质
- java学习——泛型
- 【Java学习笔记】36:泛型的类型变量的限定
- Thinking in java学习笔记—泛型(擦除)
- 黑马程序员-java学习基础加强之泛型
- Java学习笔记(七):内部类、静态类和泛型
- java 泛型 学习。
- Java学习总结8——泛型2(不支持泛型数组)
- 黑马程序员 java泛型学习总结(二)
- java学习-list集合有泛型情况添加多种类型数据
- 关于java1.5的泛型(general)的学习
- java学习中对泛型、Map、Collectiongs的一些理解
- JAVA学习第四十二课 — 泛型(二)—泛型接口&&通配符应用
- Java学习笔记(47)-----------泛型详解
- Java学习之泛型和异常