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

从头认识java-9.1 类型安全的容器

2015-11-16 21:05 302 查看
这一章节我们来简单说一下类型安全的容器。
说到类型安全,不得不说的是泛型,当然,我们在这里只是简单的介绍一下泛型怎么使用,后面的章节会继续展开。
1.怎么才算类型安全?
一个反例:package com.ray.ch09;

import java.util.ArrayList;

public class Test {
private ArrayList fruitList = new ArrayList();

public void addOrange(Orange orange) {
fruitList.add(orange);
}

public void addApply(Apple apple) {
fruitList.add(apple);
}

public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i < 5; i++) {
test.addApply(new Apple());
}
for (int i = 0; i < 10; i++) {
test.addOrange(new Orange());
}

}

}

class Apple {
}

class Orange {
}

从上面的代码可以看见fruitList里面即装了Orange,也装了Apply,那么当我们需要get出来的时候,我们只是get出来一个Object,这就会遇到一个问题,到达转换成Apply还是Orange,如果转型错误,那么运行时将抛异常。
因此,如果想把代码编程类型安全,那么就需要运用泛型,每一个List限定了放入的对象。package com.ray.ch09;

import java.util.ArrayList;

public class Test {
private ArrayList<Apple> applyList = new ArrayList<Apple>();
private ArrayList<Orange> orangeList = new ArrayList<Orange>();

public void addOrange(Orange orange) {
orangeList.add(orange);
}

public void addApply(Apple apple) {
applyList.add(apple);
}

public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i < 5; i++) {
test.addApply(new Apple());
}
for (int i = 0; i < 10; i++) {
test.addOrange(new Orange());
}

}

}

class Apple {
}

class Orange {
}

新的代码里面每一个list只能放置特定的对象,所以不会出现类型安全的问题。
而上面所使用的就是泛型,把类型给限定了。这样在运行的时候就不会出现转型异常。
 
2.对于可以向上转型的对象,如果是继承同一个类或者实现同一个接口,那么也可以放在同一个泛型list里面。package com.ray.ch09;

import java.util.ArrayList;

public class Test {
private ArrayList<Apple> applyList = new ArrayList<Apple>();

public void addApple(Apple apple) {
applyList.add(apple);
}

public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i < 5; i++) {
test.addApple(new Gala());
test.addApple(new Fuji());
}
}

}

class Apple {
}

class Gala extends Apple {
}

class Fuji extends Apple {
}

 package com.ray.ch09;

import java.util.ArrayList;

public class Test {
private ArrayList<CanSwim> swimList = new ArrayList<CanSwim>();

public void add(CanSwim canSwim) {
swimList.add(canSwim);
}

public static void main(String[] args) {
Test test = new Test();
for (int i = 0; i < 5; i++) {
test.add(new Person());
test.add(new Fish());
}
}

}

interface CanSwim {
}

class Person implements CanSwim {
}

class Fish implements CanSwim {
}

 
总结:这一章节讨论了怎样才是类型安全,然后类型安全的注意点。
 
 这一章节就到这里,谢谢。-----------------------------------目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java