Java—泛型

目录

        泛型机制:

        对于泛型的理解:

        自定义泛型注意细节:

        自定义泛型接口:

        自定义泛型方法

        1、泛型不具备继承性


泛型机制:

  • 1、泛型这种语法机制,只在程序编译阶段起作用,只是在编译器参考的。(运行阶段泛型没用)
  • 2、使用了泛型好处是什么?
    • 第一:集合中存储的元素类型统一了。
    • 第二:从集合中取出的元素类型是泛型指定的类型,不需要进行大量的向下转型。
    • 第三:提高效率
    • 第四:不再提示编译警告
  • 3、泛型的缺点是什么?
    • 导致集合中存储的元素缺乏多样性!
  • 4、可以自定义泛型。
    • 自定义泛型的时候,<>括号中的是一个标识符,随便写。
    • 一般用E和T。

对于泛型的理解:

  • 1、泛型又称为参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题
  • 2、在类声明或实例化时只要指定好需要的具体的类型即可
  • 3、Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCaseException
  • 4、可以在类声明时,通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型

  • 泛型使用时的细节:
    • 1、只能是引用数据类型
    • 2、在给泛型制定具体类型后,可以传入该类型或者其子类型
    • 3、推荐写法:List<String> list = ArrayList<>();      // 后面菱形可以空着
    • 4、如果不指定泛型,默认泛型就是Object

自定义泛型注意细节:

1、普通成员可以使用泛型

2、使用泛型的数据,不能初始化      因为数组在new   不能确定类型 就无法在内存开空间

3、静态方法中不能使用类的泛型

因为静态和类相关的,在类加载中,对象还没有创建

所以,静态方法和静态属性使用了泛型,JVM就无法完成初始化

4、泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)

5、如果在创建对象时,没有指定类型,默认为Object

自定义泛型接口:

1、接口中,静态成员也不能使用泛型

2、泛型接口的类型,在继承接口或者实现接口时确定

3、没有指定类型,默认为Object

4、实现接口时,可以直接指定泛型接口的类型

自定义泛型方法

1、语法 :   public <T,E…..> 返回类型  方法名 (参数列表){}

2、泛型方法 ,可以定义在普通类中,也可以定义在泛型类中

3、当泛型方法被调用时,类型会确定

4、public void eat(E e){}    修饰符后没有<T,E…>   eat方法不是泛型方法,而是使用了泛型

泛型不具备继承性

List<Object> list = new ArrayList<String>();   //没有这种语法

2、<?>   : 支持任意泛型类型

3、<? extends A>   :   支持A类以及A类的子类,规定了泛型的上限

4、<? super A>    :  支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值