Java编程思想第十五章泛型(4).ppt

  1. 1、本文档共90页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
public static void main(String[] args) { ClassTypeCapture<Building> ctt1 = new ClassTypeCapture<Building> (Building.class); System.out.println(ctt1.f(new Building())); System.out.println(ctt1.f(new House())); ClassTypeCapture<House> ctt2 = new ClassTypeCapture<House> (House.class); System.out.println(ctt2.f(new Building())); System.out.println(ctt2.f(new House())); } } 输出结果:true、true、false、true ★ 分析: ◆ 该示例的执行过程与前面ArrayMaker.java类似 ◆ 关键之一:注意分析泛型是如何被擦除的? ◆ 关键之二:类型标签是如何发挥出作用的? 八、擦除的补偿 2、 创建类型实例 ★ 分析:前面的Erased.java程序 ◆ 创建一个new T()的尝试将无法实现 1、在Java中无法实现的原因 ★ 一部分原因是因为:擦除 ◆ 而另一部分原因是因为:编译器没有能力验证, 类型T是否具有默认(无参)构造器 2、在C++中可以实现的原因 ★ 效果:这种操作很自然、很直观、并且很安全 ◆ 原因:在C++中,类型是在编译期受到检查的 ◆ 典例:参阅课本P381 3、Java的解决方案:了解内容 ⑴ 第一种方案:传递一个工厂对象,并使用它来 创建新的实例 ⑵ 第二种方案:模版方法设计模式 八、擦除的补偿 3、 泛型数组 ★ 原则:Java不能创建泛型数组 ◆ 替代的解决方案:在任何想要创建泛型 数组的地方都使用ArrayList 1、典例分析: ★ 参阅课本P383 ◆ 该程序实质上是对FilledListMaker.java的提炼 ◆ 在这里你将获得数组的行为,以及由泛型提供 的编译期的类型安全 public class ListOfGenerics<T> { private List<T> array = new ArrayList<T>(); public void add(T item) { array.add(item);} public T get(int index) { return array.get(index);} } ★ 归纳: ◆ 本示例给出了:使用ArrayList创建泛型数组的 标准程序 ◆ 绝大多数的程序员都喜欢采用这种方式来创建 泛型数组 2、问题的提出 ★ 可是,如果我们并不想使用ArrayList容器 ◆ 但是又希望创建出一个泛型类型的数组,那么 该怎么办呢? 3、解决思路之一: ★ 既然所有数组无论它们持有的类型如何,都具有 相同的结构(数组的槽位尺寸和数组的布局) ◆ 那么,我们能不能先创建一个Object数组, 然后 再将其转型为所希望的数组类型? ◆ 实践证明:可以编译,但不能运行 ★ 典例分析:P383~384 class Generic<T> {} public class ArrayOfGeneric { static final int SIZE = 100; static Generic<Integer>[] gia; ★ 声明一个指向数组的引用gia ◆ 该数组的元素类型为:Generic<Integer> ★ Generic<Integer>将被擦除为原生类型Generic ◆ 为了实现类型安全,编译器将保证:在数组中 能够存取的数据类型一定是Generic<Integer> @SuppressWarnings(“unchecked”) public static void main(String[] args) { // gia = (Generic<Intege

文档评论(0)

ranfand + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档