泛型和类型安全的容器的基本认知
【摘要】 Java对泛型和安全容器的基本认知用下面代码来表示:
首先定义一个类为fruit
public class Fruit { private static int id;// 定义成静态的,不用每次实例化的时候都开辟一块内存空间,直接用即可 private final int count = id++; public int id() { System.out.prin...
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> fruit = new ArrayList<Fruit>();
文章来源: cxuan.blog.csdn.net,作者:程序员cxuan,版权归原作者所有,如需转载,请联系作者。
原文链接:cxuan.blog.csdn.net/article/details/79098940
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)