(一)关于java泛型的学习总结(泛型方法、泛型擦除)
目录概要
一、泛型方法
二、利用泛型方法的特性实现代码的简化
三、 关于泛型的擦除
四、无界通配符和原生类型区别
五、转型和警告
泛型
一般的类中的属性或方法的参数,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写试用于多种类型的代码,这种限制对代码的束缚就会很大。
Java SE5后引入了泛型的概念。泛型实现了参数化类型的概念,当我们使用类或者方法时,可以像普通的函数传参一样传递类型,Java就会自动帮我们类型转换,使得类中可以适用任意类型。
注:基本类型不能作为类型参数
一、泛型方法
基本指导原则:无论何时,比起类声明泛型,我们应该尽量使用泛型方法。如果泛型方法可取代将整个类泛型化,那么就应该只使用泛型方法,因为它可以使事情更清楚明白。对于一个static方法而言,无法访问泛型类的类型参数(静态方法独立于类),所以,如果static方法需要使用泛型,必须使其成为泛型方法。
泛型方法定义示例:

运行结果:

在此示例中,GenericMethods并不是参数化的,只有方法f()拥有类型参数。
当使用泛型类时,必须在创建对象的时候就指定类型参数的值,而使用泛型方法的时候,通常不必指明参数类型,因为编译器会为我们找出具体的类型。这称为类型判断。因此我们可以向调用普通方法一样调用f(),好像f()被无限次重载过。它甚至可以接受GenericMethods作为其类型参数。
如果调用f()时传入的是基本类型,自动打包机制就会自动将基本类型包装成对应的对象。
二、利用泛型方法的特性实现代码的简化
在正常情况下如果我们要创建一个持有List的Map,要像下面一样:

我们重复的使用了类型声明,很显然这是不好的。现在,我们可以利用泛型方法的自动检测类型的特性来简化我们的工作。
我们可以创建一个工具类,他包含各种static方法,专门来创建各种常用的容器对象:

现在我们使用工具类创建来和之前的代码比较一下:

是不是感觉代码清晰了不少?
不过这只是一个例子,在正常情况下,这个方法的使用还是要视情况而定:如果某人阅读了以上代码,他可能还需要分析工具类New,以及New所隐含的功能,这时就需要权衡。但是不得不说这一特性在某些场景还是很有用的。
三、关于泛型的擦除
在我们定义完泛型后,当编译器对代码编译时,会将我们定义的泛型替换成某种已经存在的类型。具体规则就是擦除到第一个边界:
泛型参数将擦除到第一个边界。如果没有指明,就是Object。
例如: List<?> 编译器将擦除为 List<Object>
List<? extends Student> 编译器将擦除为 List<Student>
四、无界通配符和原生类型区别
无界通配符Map<String,?>和原生类型Map有时候是不同的,使用无界通配符可以增加一个信息:我想用Java泛型来编写这段代码,而不是原生类型,但是当前情况,泛型参数可以持有任何类型。
例如: Map<String ,?> map1=new HashMap();.//会产生警告,没有指定泛型
Map map2=new HashMap();//不会参数警告
五、转型和警告
当使用readObject对对象转型时,可以使用JDK5中的新的转型形式,通过泛型类转型
例如:
LIst<Student> w1`=List.class.cast(in.readObject());
//不能用下面的方式
List<Studetn>w2=List<Student>.class.cast(in.readObject());
(一)关于java泛型的学习总结(泛型方法、泛型擦除)的更多相关文章
- Java语法基础学习DayTwelve(泛型)
一.泛型(Generic)在集合中的使用 1.作用 (1)解决元素存储的安全问题 (2)解决获取数据元素时,需要类型强转的问题 2.代码案例 //在集合没有使用泛型的情况下 List list = n ...
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...
- 【原】Java学习笔记027 - 泛型
package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...
- JAVA学习第四十一课 — 泛型的基本应用(一)
泛型是JDK1.5以后出现的安全机制,简化机制,提高安全性 泛型的长处 1.将执行时出现的问题ClassCastException转移到了编译时期 2.避免了强制转换的麻烦 <>在当操作的 ...
- 【Java学习笔记】泛型
泛型: jdk1.5出现的安全机制 好处: 1.将运行时期的问题ClassCastException转到了编译时期. 2.避免了强制转换的麻烦. <>: 什么时候用? 当操作的引用数据类型 ...
- java泛型简单学习
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...
- 《徐徐道来话Java》(2):泛型和数组,以及Java是如何实现泛型的
数组和泛型容器有什么区别 要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance).逆变性(contravariance)和无关性(invariant). 若类A是类B的子类, ...
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- java泛型(一)、泛型的基本介绍和使用
现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用.泛型在java中,是一个十分重要的特性,所以要好好的研究下. 泛 型的定义:泛型是JDK 1.5的一 ...
- Java泛型解析(01):认识泛型
Java泛型解析(01):认识泛型 What Java从1.0版本号到如今的8.中间Java5中发生了一个非常重要的变化,那就是泛型机制的引入.Java5引入了泛型,主要还是为了满足在199 ...
随机推荐
- 进入子shell的各种情况分析
子shell的概念贯穿整个shell,写shell脚本时更是不可不知.所谓子shell,即从当前shell环境新开一个shell环境,这个新开的shell环境就称为子shell(subshell),而 ...
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...
- CSS:a:link;visited;hover;active解释及正确顺序
a:link 选择器设置指向普通的.未被访问页面的链接的样式, a:visited 选择器用于设置指向已被访问的页面的链接, a:active 选择器用于活动链接, a:hover 选择器用于选择鼠标 ...
- python爬虫之有道翻译
import urllib.request import urllib.parse import json class Translate(): def __init__(self): ...
- @Autowired和@Resource的区别是什么?
@Autowired 与@Resource: 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配 ...
- HTML5新结构标签和移动端页面布局
--------------------HTML5新结构标签--------------------1.h5新增的主要语义化标签如下: 1.header 页面头部.页眉 2.nav 页面导航 3.ar ...
- 银河麒麟操作系统U盘手动挂载,出现乱码
使用银河麒麟操作系统,U盘手动挂载,U盘中中文字符显示为乱码?? 对于银河麒麟操作系统的这一问题,可能是因为字符集的原因,需要在mount后加参数: sudo mount –o iochar ...
- Java企业微信开发_09_素材管理之下载微信临时素材到本地服务器
一.本节要点 1.获取临时素材接口 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=AC ...
- Spring MVC 解决无法访问静态文件和"全局异常处理"
我们都知道,Spring MVC的请求都会去找controller控制器,若果我们页面中引入了一个外部样式,这样是没效果的, 我们引入样式的时候是通过<like href="...&q ...
- YYHS-怎样更有力气
题目描述 OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:"我虽然已经保送了,但我的志向是为国家健康工作五十年.请问我应该怎样变得更有力气?" 长者回答:&quo ...