JAVA-泛型

泛型

1.为什么要有泛型(存在的意义)

对于集合,他可以存储各种类型的对象,正因为它的抽象,导致使用时会出现混乱

泛型:在声明,创建 对象时,将抽象具体化

Collection<E>,List<E>,ArrayList<E> 这个<E>就 是类型参数,即泛型。

把元素的类型设计成一个 参数,这个类型参数叫做泛型。

1.1 泛型的概念

所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)

把一个集合中的内容限制为一个特定的数据类型,这就是generics背后 的核心思想

1.2 泛型存在的意义

    1. 解决元素存储的安全性问题,好比商品、药品标签,不会弄错。

    2. 解决获取数据元素时,需要类型强制转换的问题,好比不用每回拿商品、药品都要辨别。

            Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException异常。同时,代码更加简洁、健壮。(泛型在编译时就进行了检查)


2.在集合中使用泛型(方法和注意)


3.自定义泛型(方法)

3.1 自定义泛型

    1.泛型声明

        interface<T,K> 不代表值,表示类型,在声明这里使用任意字母都可以

    2.泛型实例化

        一定要在类名后面指定类型参数的值(类型):

        List<Integer> strList = new ArrayList<Integer>();

        T只能是类,不能用基本数据类型填充。但可以使用包装类填充

3.2 自定义泛型类,接口

1. 泛型类可能有多个参数,此时应将多个参数一起放在尖括号内。比如: <E1,E2,E3>

2. 泛型类的构造器如下:public GenericClass(){}。

    而下面是错误的:public GenericClass<E>(){}

3. 实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。

4. 泛型不同的引用不能相互赋值。

>尽管在编译时ArrayList<String>和ArrayList<Integer>是两种类型,但是,在运行时只有 一个ArrayList被加载到JVM中。

5. 泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价 于Object。 经验:泛型要使用一路都用。要不用,一路都不要用。

6. 如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象。

7. jdk1.7,泛型的简化操作:ArrayList<Fruit> flist = new ArrayList<>();

8. 泛型的指定中不能使用基本数据类型,可以使用包装类替换。Integer

9. 在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态 属性的类型、非静态方法的参数类型、非静态方法的返回值类型。但在静态方法 中不能使用类的泛型。

10. 异常类不能是泛型的

11. 不能使用new E[]。但是可以:E[] elements = (E[])new Object[capacity];参考:ArrayList源码中声明:Object[] elementData,而非泛型参数类型数组。

12.父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型:

    12.1子类不保留父类的泛型:按需实现

            没有类型 擦除

            具体类型 : 实现成具体类型


    12.2子类保留父类的泛型:泛型子类

            全部保留

            部分保留


    结论:子类必须是“富二代”,子类除了指定或保留父类的泛型,还可以增加自 己的泛型

3.3 自定义泛型方法

方法,也可以被泛型化,不管此时定义在其中的类是不是泛型类。

在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。

    泛型方法的格式:

[访问权限] <泛型> 返回类型 方法名([泛型标识 参数名称]) 抛出的异常

返回类型和传入参数都是抽象的,在传入时指定类型,整个方法就是该类型的方法


4.泛型在继承上的体现

如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口,G<B>并不是G<A>的子类型!


5.通配符的使用

1.意义

抽象的运用,一对多

2.限制

只能读不能写(null除外)

3.写的方法

先get赋给Object,再来set

4.是什么

使用类型通配符:?

比如:List<?>  ,Map<?,?>

List<?>是List<String>、List<Object>等各种泛型List的父类

5.注意

1.不能在方法声明的返回上使用

2.不能用在泛型类的声明上: ?是已经生成的泛型的抽象,不是创建者,而是运用者


3.创建对象时,必须指定具体类型,不能使用?

6. 通配符? 的使用场景

6.1  <?> 允许所有泛型的引用调用

6.2 通配符指定上限

    上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=

6.3 通配符指定下限

    下限super:使用时指定的类型不能小于操作的类,即>=

6.4 举例:

1. <? extends Number>    (无穷小 , Number] 只允许泛型为Number及Number子类的引用调用

2. <? super Number>      [Number , 无穷大) 只允许泛型为Number及Number父类的引用调用

3. <? extends Comparable> 只允许泛型为实现Comparable接口的实现类的引用调用

        理解方法: 当我们向泛型指定具体类型时,?所代表的那一类类型必须满足所有情况,所以进行了整体的限定

6.泛型应用举例

个人理解:

从集合出发: 集合可以存储任何类型的对象,集合相当于一种抽象的操作,他可以应用于许多具体类型

所以使用泛型的第一个前提: 需要一个抽象的操作,对于不同的类型都可以进行该操作

指定具体的类型,在未使用这些操作之前,我们传入具体类型,实现从抽象到具体

思想: 本质是O-O编程的思想: 共同的事物就将其抽象出来,只需要实现一次就可以供每一个具体的事物使用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容