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

举报
cxuan 发表于 2021/07/15 02:10:54 2021/07/15
【摘要】 Java对泛型和安全容器的基本认知用下面代码来表示: 首先定义一个类为fruit public class Fruit { private static int id;// 定义成静态的,不用每次实例化的时候都开辟一块内存空间,直接用即可 private final int count = id++; public int id() { System.out.prin...

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

首先定义一个类为fruit


   
  1. public class Fruit {
  2. private static int id;
  3. // 定义成静态的,不用每次实例化的时候都开辟一块内存空间,直接用即可
  4. private final int count = id++;
  5. public int id() {
  6. System.out.println("count=" + count);
  7. return count;
  8. }
  9. }


  
  1. public class Vegetable {
  2. }


  
  1. public class FruitAndVegetable {
  2. public static void main(String[] args) {
  3. ArrayList fruit = new ArrayList(); // 不加泛型默认都是object类型的
  4. for(int i = 0;i < 10;i++) {
  5. fruit.add(new Fruit());
  6. //在一个容器中,可以理解为盘子,在这个盘子中放入水果,这个盘子默认是什么都能放的盘子
  7. }
  8. fruit.add(new Vegetable());//在容器中放入蔬菜
  9. for(int i = 0;i < fruit.size();i++) {
  10. // 把放进去的实例(水果、蔬菜)进行遍历
  11. ((Fruit)fruit.get(i)).id(); //默认取出来是object类型,需要把它转换成你想要的Fruit类型
  12. }
  13. }

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:


  
  1. public class Vegetable extends Fruit{
  2. }



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

ArrayList<Fruit> fruit = new ArrayList<Fruit>();
 



文章来源: cxuan.blog.csdn.net,作者:程序员cxuan,版权归原作者所有,如需转载,请联系作者。

原文链接:cxuan.blog.csdn.net/article/details/79098940

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。