Java泛型学习笔记

泛型:

允许在定义类、接口时通过一个标识表示类中某个属性的类型或者某个方法返回值及参数类型,jdk1.5及以后改写了集合框架上全部接口和类。在指明完成后,在集合或类或接口的内部结构中,所有用到泛型的位置都会转变成外部指定的泛型

*不使用泛型可能导致的后果:类型不统一导致不安全;强制转换时可能报错。使用泛型,在编译时会进行类型检查以保证数据安全;避免强制转换避免报错

*泛型是个类型,不能输入基本数据类型,输入基本数据类型时需要使用包装类

*由于Map中存在键值对两个数据,所以可以设置两个泛型

*若在实例化时没有声明泛型,则泛型默认为Object类型

*jdk7之后存在类型推断,在实例化时可以只在声明变量时使用泛型,省略构造器等内部结构的泛型,但要保存下尖括号

自定义泛型:泛型类、泛型接口、泛型方法

     泛型类:1.如果定义了泛型类,但实例化时没有指明类的泛型,则认为此泛型类型依旧是Object类型;2.如果子类在继承泛型的父类时指明了泛型类型,则实例化子类对象时不再需要指明泛型,同时子类也不再是泛型类了

*泛型可以有多个参数,中间以逗号隔开

*声明空参构造器时不加泛型

*泛型不同的引用不能相互赋值

*静态方法和异常类不能使用泛型

*不可以直接拿泛型类型来实例化,必须用Object构造然后用泛型类型进行强转。注意在真实赋值中必须赋值泛型类型的元素,不要真赋Object元素

泛型接口:与泛型类注意点相同,差别在于类与接口的差别,在泛型使用规范上基本无异

泛型方法:泛型方法所属的类是否带泛型并不影响,方法的泛型参数与类的泛型参数无关。泛型方法的泛型仅服务于方法自身,方法不确定传入参数的类型才使用泛型方法

*泛型方法可以作为静态方法,因为泛型参数是在调用方法时确定的,并非在实例化时确定

泛型在继承方面的体现:如果类1与类2具有子父类关系,但G<类1>与G<类2>不具有子父类关系,而是并列关系;类(接口)1<G>与类(接口)2<G>有子父类关系

*通配符的使用:<?>,使用通配符后,使用它的集合或类成为同名结构的共同父类;使用通配符的集合或类取出其中的对象,对象的类型为Object

*使用了通配符的结构,无法向内部添加任何除null以外的元素,只能通过相同结构进行赋值;如果使用了通配符的结构内部存在元素,可以将元素转化为Object进行正常输出

*有限制条件的通配符的使用:

     ?extends A:G<? extends A>可以作为G<A>和G<B>的父类,其中B是A的子类。(此有限制通配符不能通过类似add的方法加入元素,因为只有子类才能加入父类当中,而extends中向下取小的范围不能被确定,加入的元素可能大于extends的下边界,即可能出现子类大于父类的情况)

     ? super A:G<? super A>可以作为G<A>和G<B>的父类,其中B是A的父类

*使用加上super条件的通配符的结构,可以亡其内部add加入元素

*泛型也可以加上有限制条件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值