您的位置:首页 > 编程语言 > Java开发

JAVA学习:泛型的必要性

2012-08-31 21:21 316 查看
没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制类型转换都是自动和隐式的。提高代码的重用率。

综述:在使用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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: