一点点core java的笔记-泛型程序设计

泛型程序设计

类型参数: <string>可读性,错误检查,避免强制转换。

定义简单泛型类:

 

 
 

 

 

E:集合的元素类型
K, V 表关键字与值类型
T, U, S 任意类型

泛型方法: public static <T> T get Middle
(T... a)
调用时在方法前的尖括号加上具体类型。

类型变量限定:

public static <T extends Comparable> T min ( T... a)
为什么不是implements? T 是绑定类型的子类型,可类可接口。

类型擦除:自动提供泛型类型的原始类型,无限定即为 Object。

 

 
 

 

 

翻译泛型表达式:由于类型擦除,编译器会加上把返回的类型强转为原本类型。

翻译泛型方法:P319,类型擦除后可能与多态冲突,编译器会自动生成桥方法,覆盖超类中的方法。

 

 
 

 

 

泛型的约束

  1. 无法用基本类型,如<double>(由于类型擦除)
  2. 运行时查询只产生原始类型 (类型擦除)
  3. 无参数化类型数组

Varags 警告: 可变参数方法若有泛型,可加Safe Varags (安全变量) 注释消除警告。

无法实例化:不能用new T (...),解决方法为提供构造器表达式。

 

 
 

 

 

禁止用有类型变量的静态域\方法

泛型类型的继承:
S, T的联系与 Pair < S > , Pair < T >无关。
可将参数化类型转换为原始类型。
泛型类可 extends/ implement 其它泛型类。

 

 
 

 

 

通配符:
Pair <Employee> 改为Pair <? extends Employee>,这样可传入Pair <Manager>。

可区分安全的访问器与不安全的更改器
? extends 无法用于匹配,但能识别返回类型。

通配符的超类型限定:? super Manager限制为Manager 的超类,

 

 

P 333另一种应用

通配符捕获:

反射和泛型:P337

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值