一、泛型简介

泛型是从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:泛型初探相关推荐

  1. 9.1-全栈Java笔记: 容器泛型—认识Collection接口

    开发和学习中需要时刻和数据打交道,如果组织这些数据是我们编程中重要的内容. 我们一般通过"容器"来容纳和管理数据.   事实上,数组就是一种容器,可以在其中放置对象或基本类型数据. ...

  2. 【java笔记】泛型定义和使用

    为什么使用泛型 泛型的字面意思就是广泛的类型.利用泛型,同一套代码可以用于多种数据类型, 这样,不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性 可读性:var s=new ArrayLi ...

  3. Java笔记:泛型、限定通配符与非限定通配符

    目录 1 泛型 2 限定通配符与非限定通配符 2.1 限定通配符 2.2 非限定通配符 3 PECS(Producer Extends Consumer Super)原则 3.1 Producer E ...

  4. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  5. 14. Java基础之泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...

  6. Java笔记05-Collection、泛型、迭代器

    Java笔记05-Collection.泛型.迭代器 [Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 第一章 Collection集合 1.1 集合概述 ...

  7. 【笔记】JAVA中的泛型和反射

    泛型 Java的泛型是如何工作的?什么是类型擦除? ----泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息.例如List在运行时仅用一个Lis ...

  8. java笔记冯佳微盘,JAVA学习笔记14 - osc_vsdge2u3的个人空间 - OSCHINA - 中文开源技术交流社区...

    01(Map集合概述和特点) * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映射到一个值 * B:Map接口和Collect ...

  9. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

最新文章

  1. 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
  2. 例4-1和例4-2和例4-3
  3. 可真有你的!EasyEdge模型压缩新姿势……
  4. Yii2的MVC新特性
  5. LeetCode刷题实战(2):Add Two Numbers
  6. java guava_多线程(java和guava两种方式):
  7. 怎么做软件安全性测试
  8. L1-060 心理阴影面积 (5 分)-PAT 团体程序设计天梯赛 GPLT
  9. Magento url 问题
  10. 大学计算机与应用软件,深圳大学
  11. cannot deserialize from Object value
  12. tomcat:日志配置详解(避免日志过多撑爆磁盘)
  13. Deployer php自动部署,Deployer 自动部署
  14. Atmel 官方网站中文版
  15. Spring Boot 分布式事物管理
  16. rust为什么找不到服务器,rust找不到朋友的服务器 | 手游网游页游攻略大全
  17. 不是抽象类的基类不是好基类
  18. 设计模式——迭代器模式(遍历王者荣耀和英雄联盟英雄信息)
  19. 超级玩家全面进化 联想Z5s、Z5 Pro GT 855版、S5 Pro GT发布
  20. python编程从入门到实践 第18章Django入门 2022年最新

热门文章

  1. 九坤投资投身基础科研,携手IDEA成立联合实验室
  2. 他们拿走腾讯广告百万奖金,我算是知道票圈广告为啥那么多赞了
  3. “接着奏乐接着舞”,大脑也是这么想的
  4. 暨南大学击败清华,首次夺得ASC世界大学生超算竞赛冠军
  5. 矩阵元算法科学家谢翔: Rosetta如何连接隐私计算与AI?
  6. 西南这座城,脸,比北上广还有用
  7. 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
  8. 是时候改变自学编程方法了,这篇国外网友的教程被fast.ai创始人点赞
  9. PagingAndSortingRepository接口与 JpaRepository接口
  10. java多线程系列1:Sychronized关键字