JavaSE——泛型

一、泛型的简单介绍(Generic)

1.诞生的意义

       为什么出现?顺序表本身是一种抽象数据类型,保存的数据不只是int型。如果没有泛型的支持,我们必须为每一种要保存的类型定义一个顺序表类。

为了解决此问题:

第一阶段:思考

(1)Object 是所有类的基类

class ArrayList{ Object[ ] array; int size; }

元素类型:Object类类型的引用。Object引用可以指向任意类的对象

 

(2)多态:基类的引用可以指向任何子类的对象

第二阶段:引出了新的问题

写代码时必须一直记着顺序表中的元素类型,否则就会出现运行时异常:

ClassCastException //Object[];

ArrayList List = new ArrayList();

class Person{} list.add(new Person());

String o=(String)list.get(0);

泛型产生

2.泛型的三种用途:

(1)泛型接口

(2)泛型类

(3)泛型方法

二、泛型出现的原因

1.为了解决类似顺序表这样的结构,支持通用类型元素类型

2.Object

(1)Object 是所有类的基类

(2)基类的引用可以指向任何对

         class ArrayList{ Object[] array; int size; }

3.这种解决方案,无法在编译期间快速找出问题

ArrayList list=new ArrayList();

list.add(new Person());

String s=(String)list.get(0);

                         //list 第0个下标处,实际的对象类型是Person

                       //String 引用无法指向这个对象

                       //运行期间会抛出异常 ClassCastException

*前提:错误越早发现越好

(1)写代码时 IDEA 用~提示错误

(2)编译期间 javac报错

(3)运行期间去报错

4.为了让错误尽可能在编译期间出现,引入了泛型

三、泛型的语法

1.定义泛型类

class ArrayLIst<类型变量形参 Type Variable Paramter>{ }

class ArrayList{ E[] array; int size; }

2.使用泛型

new ArrayList<String>();

2.1嵌套

ArrayList<String> p=....;

ArrayList<> q=...; //q的元素类型期望是 ArrayList<String><>

ArrayList<ArrayList<String>> q;

Set<Map.Entry<String,String>>

2.2类型推导 Type Inferer

ArrayList<String> p = new ArrayList{};

2.3多类型参数

Map<String,Integer>成绩;

例子:ArrayList<Person>p=new ArrayList<>();

p.add(new Preson());

String s =(String)p.get(0); //这里编译错误

*3.泛型是编译期间的魔法。类的字节码中就没有泛型了,运行期间更没有

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值