JavaSE复习_8 泛型程序设计
今晚看了core Java的泛型部分,万万没有想到,当时看培训班视频入门的一带而过的泛型,有这样多的细节,整理了一下书里面提到的一些自认为的重点,方便以后观阅.由于是复习,一些基础知识跳过.
△泛型类型的限定:即<T extends Comparable>类型,T为绑定类型的子类型,而一个类型的变量或者通配符可以有多个限定,例如<T extends Comparable&Serializable>
△Java中实现泛型机制是通过类型擦除来保证的,有给定限定用第一个限定的类型变量来替换,没有给定限定用Object来替换.
△在牵扯到特定类型的返回时,编译器会自动添加类型转换,来保证类型的匹配.对此虚拟机一无所知.
△Java在翻译泛型方法的时候,会带来一些问题,例如,如果父类泛型类为Pair<T> 内部有方法public void set(T t).那么假设子类DateInterval继承父类Pair<Date>重写为public void set(Date d).这时候将父类引用指向子类对象的时候,就会发生问题,本意是让子类对象去覆盖父类的方法,但是由于泛型的擦除,父类的方法变为public void set(Object t),这时候就无法覆盖了.实际上,子类里包含两个方法,从父类继承的public void set(Object o),和子类准备重写的public void set(Date d).这时候,就会产生问题.实际上,聪明的编译器在DateInterval extends Pair<Date>被擦除变为DateInterval extends Pair的时候,会在子类增加一个方法,这个方法被称为桥接方法.桥接方法覆盖了Object方法,其格式为:public void set(Object o){set((Date)o)}.实际上,桥接方法一般情况下只能存在一个,因此下面的代码是非法的:
class Calendar implements Comparable<Calendar>{}
class GregorianCalendar extends Calendar implements GregorianCalendar<GregorianCalendar>{}
因为有可能与合成的桥方法产生冲突.总而言之,需要注意的是:虚拟机没有泛型只有标准的类和方法,桥方法被合成以保持多态.
△运行时的类型查询只适用于原始类型.例如instance of为一个运行时查询的关键字,那么a instance of Pair<T>仅仅测试a是否是一个任意类型的Pair.同样的道理,getclass返回运行时类型:
Pair<String> stringPair=...;
Pair<Employee> emPair=...;
if(stringPair.getClass()==emPair.getClass())//true,两者相等
△泛型类的静态上下文中声明在类上的类型变量无效.例如下面的例子是错误的:
class Demo<T> {
public static T get(){}
}
但是,声明在静态方法上的变量可以正常使用:
public static <T> T get(){} //正确
△通配符<? extends Comparable>代表任意子类,因此可以用父类来接收,但是不能往里面增加元素,简称为get原则,通配符<? super Demo>代表任意父类,因此可以往里面添加子类元素,但是无法从内部获取元素,因为不确定是什么父类,即Put原则.典型通配符的运用<T extends Comparable<? super T>>代表T实现了Comparable接口,Comparable接口是用其父类元素作比较的.
JavaSE复习_8 泛型程序设计的更多相关文章
- Java基础语法<十二> 泛型程序设计
1 意义 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 常见应用 : ArrayList 2 K T V E ? object等的含义 类型变量使用大写形式 E – Element ( ...
- Java核心技术第八章——泛型程序设计(1)
1.泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.例如:不希望为了聚集String和Integer对象分别设计不同的类.(个人觉得此处说的聚集译为:创建一个对象,属性可以为 ...
- Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
- C++学习笔记53:泛型程序设计与C++标准模板库
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...
- Java核心技术-泛型程序设计
使用泛型机制编写的代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性. 泛型对于集合类尤其有用 1 为什么要使用泛型程序设计 泛型程序设计意味着编写的代码可以 ...
- 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语
有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...
- C++ 泛型程序设计与STL模板库(1)---泛型程序设计简介及STL简介与结构
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念 用来界定具备一定功能的数据类型.例如: 将 ...
- javaSE复习之——线程
线程其实就是程序执行的一条路径,一个进程中可以包含多条线程,多线程并发执行可以提高程序效率,可以同使完成多项任务 多线程的应用场景 迅雷多线程一起下载 服务器同时处理多个客户请求 多线程原理(单核CP ...
- JavaSE复习总结之集合(Collection)
Java早期版本只给集合类库提供了很少的一组类,但是随着Java版本的升级,Java集合类库越来越充实.集合类库里面存放的,是各式各样的数据容器,我们基本都学过数据结构这门课,数据结构所讲的就是ADT ...
随机推荐
- PMO到底什么样?
PMO到底什么样? 当将来项目办理单位彻底健全了,达到最老练的程度的时分项目办理单位应当干哪些活,有哪些大块功能,也即是关于一个全部的PMO它的功能跟人物都包含啥? 下面这个模型精确的说是英国的项目办 ...
- EffectiveJava笔记(第一部分)
考虑用静态构造方法代替构造器的好处: 1.静态构造方法有名字 BigInteger.probablePrime(int, int, Random)比 new BigInteger(int, i ...
- java基础:网络编程TCP,URL
获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostExc ...
- Oracle之ORA-00972: identifier is too long
一.前言 今天在程序的日志中出现这个错误,网上搜了一下发现,说是Oracle的对象名字最多是30个字符,不能超过30,而我出错的sql是: "select * from test where ...
- C#中通过Selenium定位<a>标签的问题
刚才在QQ群里看到有人提问,如何实现退出百度登录问题.那么之所以会有这个问题,主要是因为这个元素,如下图所示,是无法直接定位到的: 经过研究发现,要想定位到这种元素,拢共分两步: 第一步,把鼠标移到能 ...
- php获取当前时间和转换格式
## 获取时间和转换格式```//1.time():返回当前时间的Unix时间戳$stimestamp = time();$date = date("Y-m-d h:i:sa",$ ...
- MyBatis的返回参数类型和查询结果遍历
MyBatis的返回参数类型分两种 1. 对应的分类为: 1.1.resultMap: 1.2.resultType: 2 .对应返回值类型: 2.1.resultMap:结果集 2.2.result ...
- 使用mybatis完成通用dao和通用service
使用mybatis完成通用dao和通用service 概述: 使用通用dao和通用service可以减少代码的开发.可以将常用的增删改查放到通用dao中.对不同的or框架,基本上都有自己的实现如Spr ...
- SqlSever基础 substring 从指定位置开始,截取指定长度的字符串
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- EXCEL中讲 10分10秒转换成610秒
前几天宝贝跟我打赌100W说我20天给她打电话不到10小时,我说绝对超过10小时了,但是由于宝贝的赖皮死活不承认,所以我被迫掉出通话记录,拿到通话记录我有点小郁闷,因为通话记录里的时间格式00分00秒 ...