加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 服务器 > 安全 > 正文

lt;数据结构与算法分析gt;读书笔记--实现泛型构件pre-Java5

发布时间:2021-04-03 10:14:57 所属栏目:安全 来源:网络整理
导读:? 面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要的机制就是泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能。 ? ? 1.使用Object表示泛型 Java中的基本思想就是可以通过使用像Ob

示例三(如何能够使用MemoryCell来存储整数):

 cn.pre.example;

 * 基本类型包装类
 *  WrapperDemo {

    
     MemoryCell();
        m.write(new Integer(37));
        Integer wrapperVal = (Integer) m.rend();
        int val = wrapperVal.intValue();
        System.out.println("Contents are:"+val);
    }
    
}

?

基本数据对应的包装类:

byte -> Byte

short ->Short

int -> Integer

long ->Long

double ->Double

float ->Float

char ->Character

boolean -> Boolean

?

3.使用接口类型表示泛型

只有在使用Object类中已有的那些方法能够表示所执行的操作的时候,才能使用Object作为泛型类型来工作。

例如,考虑在由一些项组成的数组中找出最大项的问题。基本的代码是类型无关的,但是它的确需要一种能力来比较任意两个对象,并确定哪个是大的,哪个是小的。因此,我们不能直接找出Object的数组中的最大元素。最简单的想法是找出Comparable的数组中最大元。要确定顺序,可以使用compareTo()方法,我们知道,它对所有的Comparable都必然是现成可用的。

现在,提出几个忠告很重要。首先,只有实现Comparable接口的那些对象才能够作为Comparable数组的元素被传递。仅有compareTo()方法但并未宣称实现Comparable接口的对象不是Comparable的,它不具有必需的IS-A关系。因为我们也许会比较两个Shape的面积,因此假设Shape实现Comparable接口。

第二,如果Comparable数组有两个不相容的对象(例如一个String和一个Shape),那么Comparable方法将抛出异常ClassCastException(类型转换异常)。

第三,如前所述,基本类型不能作为Comparable传递,但是包装类则可以,因为它们实现了Comparable接口。

第四,接口究竟是不是标准的库接口倒不是必需的。

最后,这个方案不是总能够行得通,因为有时宣称一个类实现所需的接口是不可能的。例如,一个类可能是库中的类,而接口却是用户定义的接口。如果一个类是final类,那么我们就不可能扩展它以创建一个新的类。

4.数组类型的兼容性

语言设计中的困难之一是如何处理集合类型的继承问题。设Employee IS-A Person。那么,这是不是意味着数组Employee[] IS -A Person[]呢?换句话说,如果一个例程接受Person[]作为参数,那么我们能不能把Employee[]作为参数来传递呢?

咋看,该问题不值得一问,似乎Employee[]就应该是和Person[]类型兼容的。然而这个问题比想象中要复杂。假设除Employee外,我们还有Studeng IS-A Person,并设Employee[]是和Person[]类型兼容的。此时考虑下面两条赋值语句:

Person[] arr = new Employee["5];//编译:arrays are compatible

arr[0]= new  Student(...);//编译: Studeng IS-A Person

两句都编译,而arr[0]实际上是引用一个Employee,可是Student IS-NOT-A Employee。这样就产生了类型混乱。运行时系统(runtime system)不能抛出ClassCastException异常,因为不存在类型转换。

?

避免这种问题的最容易的方法是指定这些数组不是类型兼容的。可是,在Java中数组却是兼容的。这叫做协变数组类型。每个数组都明了它所允许存储的对象的类型。

如果将一个不兼容的类型插入到数组中,那么虚拟机将抛出ArrayStoreException异常(数组存储异常)。

?

示例代码我已经提交到我的Github,有需要可克隆下载。

代码地址为:https://github.com/youcong1996/The-Data-structures-and-algorithms/tree/master/Introduction

?

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读