java泛型程序设计——泛型类型的继承原则

【0】README

0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 泛型类型的继承原则 的知识;


【1】泛型类型的继承原则相关

1.1)考虑一个类 Employee 和一个Employee子类 Manger , 问: Pair 是 Pair 的一个子类吗?答案是: “不是的”;
1.2)看个荔枝:(下面的代码将不能编译)

Manager[] m1 = ...;
Pair<Employee> results = ArrayAlg.minmax(m1); // ERROR
minmax  方法返回 Pair<Manager> ,而不是 Pair<Employee> ,并且这样的赋值是不合法的;

这里写图片描述
Annotation)

  • A1)可以将一个 Manger[] 数组赋给一个 Employee[] 的 数组;
Manager[] m1 = {ceo , cfo};
Employee[] e1 = m1; //OK
  • 然而, 数组带有特别的保护, 如果试图将一个 低级别的雇员存储到 e1[0], 那么虚拟机会 抛出 ArrayStoreException 异常;
  • A2)永远可以将参数化类型转换为一个原始类型: 如, Pair《Employee》 是原始类型 Pair 的一个子类型;
Pair< Manger> m1 = new Pair<>(ceo, cfo);
Pair m2 = m1; //OK
r2.setFirst(new File("...")) // only a compile-time warning
  • 当使用 getFirst 获得外来对象并赋给 Manager变量时, 与通常一样, 会抛出 ClassCastExcetpion 异常。
  • A3)最后泛型类可以扩展或 实现 其他的泛型类: 如, ArrayList《T》 类实现 List《T》 接口。 这意味着, 一个 ArrayList《Manager》 可以被转换为一个 List《Manager》。 但是, 如前面所见, 一个 ArrayList《Manager》 不是一个 ArrayList《Employee》List《Employee》
  • 下图展示了它们的联系:
    这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值