Java-很深我只知其一-泛型

Java-很深我只知其一-泛型

目录

泛型历史

泛型类/泛型接口

 泛型方法

 泛型属性

 泛型约束


  • 泛型历史

  1. JAVA 泛型(generics)是 JDK 5 中引入的一个新特性, 允许程序员在编程时指定类型参数,使编译器可以在编译代码时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
  2. JDK 7之后泛型可以简写成ArrayList<String> list = new ArrayList<>();
  • 泛型类/泛型接口

  1. 一般用T,E,K,V,N,R表示,?表示通配符/占位符,约定与习惯吧。当然啊,用什么表示都可以,只要符合java规范即可。
    1. E - Element (在集合中使用,因为集合中存放的是元素) ,枚举Enum
    2. T - Type(Java 类)
    3. K - Key(键)
    4. V - Value(值)
    5. N - Number(数值类型)
  2. 下面示例中,在类(接口)名后紧跟泛型声明(例如:<T>和<T1,T2,R>),代表此类(接口)中拥有的泛型数量,也就是说当前类(泛型)可以同时使用多少种数据类型。
  3. 如果类(接口)中出现相同泛型声明的属性、方法参数、方法返回值,则表示它们是同一类型。

 

  •  泛型方法

  1. 泛型类(接口)已经声明的泛型在泛型方法中可以直接使用,没有声明的需要在方法上单独声明。
  2. 已经在类(接口)中声明的不可再方法上重复声明,数据域问题。
  3. 下面示例中用到了泛型参数和泛型返回值。

  •  泛型属性

  1. 类属性要使用泛型,需要在类(接口)提前声明。
  2. 方法属性要使用泛型,需要在方法提前声明。
  3. 下面示例中GenericClazz类给的泛型为Demo,当然可以是任何类型,这里使用了引用类做示范。

  •  泛型约束

  1. 下面视图存在两个引用数据类型Demo2和GenericClazz,Demo2继承了GenericClazz。
  2. ? 表示占位符/通配符,表示当前类型。
  3. ArrayList<? extends GenericClazz>:声明上界,表示参数化的类型可能是所指定的 GenericClazz 类型,或者是此类型的任意子类型。
  4. ArrayList<? super Demo2>:声明下界,表示参数化的类型可能是所指定的 Demo2 类型,或者是此类型的任意父类型。
  5. ? extends/ ? super 会导致泛型协变性,示例中红色报错点均为extends泛型协变性导致
    1. extends:对象可读、不可写。
    2. super :对象可读、可写。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值