泛型类型安全的容器的基本认知

网友投稿 747 2022-05-28

Java对泛型和安全容器的基本认知用下面代码来表示:

首先定义一个类为fruit

public class Fruit {

private static int id;

// 定义成静态的,不用每次实例化的时候都开辟一块内存空间,直接用即可

private final int count = id++;

public int id() {

System.out.println("count=" + count);

return count;

}

}

public class Vegetable {

}

public class FruitAndVegetable {

public static void main(String[] args) {

ArrayList fruit = new ArrayList(); // 不加泛型默认都是object类型的

for(int i = 0;i < 10;i++) {

fruit.add(new Fruit());

//在一个容器中,可以理解为盘子,在这个盘子中放入水果,这个盘子默认是什么都能放的盘子

}

fruit.add(new Vegetable());//在容器中放入蔬菜

for(int i = 0;i < fruit.size();i++) {

// 把放进去的实例(水果、蔬菜)进行遍历

((Fruit)fruit.get(i)).id(); //默认取出来是object类型,需要把它转换成你想要的Fruit类型

}

}

count=0

count=1

count=2

count=3

count=4

count=5

count=6

count=7

count=8

count=9

Exception in thread "main"

java.lang.ClassCastException

: test.Vegetable cannot be cast to test.Fruit

泛型和类型安全的容器的基本认知

at test.FruitAndVegetable.main(

FruitAndVegetable.java:16

)

因为你盘子中放的是Fruit 和 Vegetable ,但是这两者没有任何关系,你只把它转化成Fruit,vegetable类型是不安全的,vegetable类型无法转化为Fruit类型,所以会报错,解决上述问题,只要让他们发生关系即可

解决方法1:

public class Vegetable extends Fruit{

}

只要把上述Object类型的盘子转换为只能放Fruit类型的盘子即可

ArrayList fruit = new ArrayList();

Java 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mac系统下使用VirtualBox虚拟机安装win7--第二步 创建win7系统
下一篇:虫子 三子棋 众神起步,万语之基,软硬桥梁,帝国大厦
相关文章