Java笔记14:泛型初探
一、泛型简介
泛型是从Java SE 1.5开始出现的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。
二、代码实现
这里给出了两个例子实现同样的功能,一个使用了泛型,一个没有使用泛型,通过对比,可以很快学会泛型的应用,学会这两个例子基本上就学会了泛型70%的内容。
例1:使用了泛型
classGen<T> {
private T obj;
public Gen(T obj) {
this.obj = obj;
}
public TgetObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
public void printType() {
System.out.println("T的实际类型为:" + obj.getClass().getName());;
}
}
public class GenDemo {
public static voidmain(String[] args) {
Gen<Integer> intObj = new Gen<Integer> (888);
intObj.printType();
int i = intObj.getObj();
System.out.println("value = " + i);
System.out.println("----------我是分割线----------");
Gen<String> strObj = new Gen<String>("Hello Gen!");
strObj.printType();
String s = strObj.getObj();
System.out.println("value = " + s);
}
}
运行结果:
T的实际类型为:java.lang.Integer
value =888
----------我是分割线----------
T的实际类型为:java.lang.String
value =Hello Gen!
例2:不使用泛型
class Gen2 {
private Object obj;
publicGen2(Object obj) {
this.obj = obj;
}
public ObjectgetObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public void printType() {
System.out.println("T的实际类型为:" + obj.getClass().getName());
}
}
public class GenDemo2 {
public static voidmain(String[] args) {
Gen2 intObj = new Gen2(new Integer(666));
intObj.printType();
int i =(Integer)intObj.getObj();
System.out.println("value = " + i);
System.out.println("----------我是分割线----------");
Gen2 strObj = new Gen2("Hello Gen!");
strObj.printType();
String s =(String)strObj.getObj();
System.out.println("value = " + s);
}
}
运行结果:
T的实际类型为:java.lang.Integer
value =666
----------我是分割线----------
T的实际类型为:java.lang.String
value = Hello Gen!
Java笔记14:泛型初探相关推荐
- 9.1-全栈Java笔记: 容器泛型—认识Collection接口
开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据. 事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...
- 【java笔记】泛型定义和使用
为什么使用泛型 泛型的字面意思就是广泛的类型.利用泛型,同一套代码可以用于多种数据类型, 这样,不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性 可读性:var s=new ArrayLi ...
- Java笔记:泛型、限定通配符与非限定通配符
目录 1 泛型 2 限定通配符与非限定通配符 2.1 限定通配符 2.2 非限定通配符 3 PECS(Producer Extends Consumer Super)原则 3.1 Producer E ...
- Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)
Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...
- 14. Java基础之泛型
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...
- Java笔记05-Collection、泛型、迭代器
Java笔记05-Collection.泛型.迭代器 [Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 第一章 Collection集合 1.1 集合概述 ...
- 【笔记】JAVA中的泛型和反射
泛型 Java的泛型是如何工作的?什么是类型擦除? ----泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息.例如List在运行时仅用一个Lis ...
- java笔记冯佳微盘,JAVA学习笔记14 - osc_vsdge2u3的个人空间 - OSCHINA - 中文开源技术交流社区...
01(Map集合概述和特点) * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映射到一个值 * B:Map接口和Collect ...
- 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
最新文章
- 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
- 例4-1和例4-2和例4-3
- 可真有你的!EasyEdge模型压缩新姿势……
- Yii2的MVC新特性
- LeetCode刷题实战(2):Add Two Numbers
- java guava_多线程(java和guava两种方式):
- 怎么做软件安全性测试
- L1-060 心理阴影面积 (5 分)-PAT 团体程序设计天梯赛 GPLT
- Magento url 问题
- 大学计算机与应用软件,深圳大学
- cannot deserialize from Object value
- tomcat:日志配置详解(避免日志过多撑爆磁盘)
- Deployer php自动部署,Deployer 自动部署
- Atmel 官方网站中文版
- Spring Boot 分布式事物管理
- rust为什么找不到服务器,rust找不到朋友的服务器 | 手游网游页游攻略大全
- 不是抽象类的基类不是好基类
- 设计模式——迭代器模式(遍历王者荣耀和英雄联盟英雄信息)
- 超级玩家全面进化 联想Z5s、Z5 Pro GT 855版、S5 Pro GT发布
- python编程从入门到实践 第18章Django入门 2022年最新
热门文章
- 九坤投资投身基础科研,携手IDEA成立联合实验室
- 他们拿走腾讯广告百万奖金,我算是知道票圈广告为啥那么多赞了
- “接着奏乐接着舞”,大脑也是这么想的
- 暨南大学击败清华,首次夺得ASC世界大学生超算竞赛冠军
- 矩阵元算法科学家谢翔: Rosetta如何连接隐私计算与AI?
- 西南这座城,脸,比北上广还有用
- 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
- 是时候改变自学编程方法了,这篇国外网友的教程被fast.ai创始人点赞
- PagingAndSortingRepository接口与 JpaRepository接口
- java多线程系列1:Sychronized关键字