数据结构与算法分析(Java描述)学习笔记 第一章

数据结构与算法分析(Java描述)学习笔记 第一章

​ 在本章的学习中,学习了一些有关泛型的知识。下面进行一定程度的总结。

1.4.3 使用接口类型表示泛型

​ 在进行函数参数的传入时,我们可以用诸如下面的形式,传入参数

Public static Comparable findMax(Comparable [] arr)

​ 这个语句的意思是,传入一个参数,该参数是一个了Comparable接口,该函数的返回类型也是一个实现了Comparable的数组。

1.4.4与1.5.7 数组类型的兼容性与类型擦除

​ 在这两节中,学习的是有关协变数组类型擦除的知识。

协变数组:指的是Shape,Square ,Square继承了Shape,并且理所应当的Square[] 也可以存入Shape[]中(这种特性可以称之为协变的特性),但是这样会导致如下的问题

Person[] arr=new Employee[5];
arr[0]=new Student();

这样的话编译不会报错,但是在程序运行的时候会产生ArrayStoreException的问题。

​ 但泛型并不具有协变的性质。如下编译失败。

public static void main(String[] args) {
     List< Object> list = new ArrayList< String>();
     list.add( 10 );
}

类型擦除:Java的泛型并不是真正的泛型,它针对的是Java语言而不是Java虚拟机,在编译的过程中,它会产生一种类型擦除的机制,即将<>运算符中的类型进行暂时性的“擦除”,在被调用的时候,一些相应的特性才会被加入。由此也可以得出结论,对于使用泛型生成的代码与原始并无太大差异,其优点在于,将运行时的错误在编译阶段就可以体现出来,因此,泛型常常用于Map以及Collection的使用中。

1.5.6 类型限界

​ 在该部分中,类型限界主要是对泛型进行限界,例如

<T extends Shape>

判断传进来的泛型T是否继承于Shape,若Shape是用泛型定义的泛型类,那么就会变成这样

< T extends Shape<? super T>> 

这便已经是最复杂的形式

1.6 函数对象

​ 函数对象的传入也满足泛型的规律,

T findMax(T arr[],Comparator<? super T> cmp)

一个函数,返回T类型,第一个参数为T类型的数组,第二个参数为一个对象,该对象实现了Comparator,

其他

Java实现了自动装箱与自动拆箱,实现基本类型与引用类型的转换

instance of 仅对原始类(非泛型类)进行检测与类型转换工作。

对于Static方法,不可引用类的类型变量(泛型变量)。

参数化数组不可实例化,即一个数组的定义由泛型组成不可直接实例化。可以通过非参数化数组将之转换,但并无实际作用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值