概述

什么是泛型?

泛型,是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?
顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/公用时传入具体的类型这种参数类型可以用在类、方法和接口中,分别被称为泛型、泛型方法、泛型接口。

为什么要使用泛型?

一言以蔽之,编译时检测到非法的类型
场景:给你一个ArrayList,让你求该list中所有元素的和。(注意,该list原则上是要存int类型的数的)
没有泛型之前:

  ArrayList arrayList = new ArrayList();arrayList.add(1);arrayList.add(2);arrayList.add(3);//非法输入,但不会报错arrayList.add("3");

求list的元素和的话我会遍历该list,然后依次相加。
发现这个list最后存入了一个String类型的值,当你遍历相加肯定是得不到正确答案的!
使用泛型之后:

ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
//非法输入,直接报错
arrayList.add("3");

可以看出在创建list时指定了存储的类Integer,因此在后续添加元素时添加了String就直接报错了,因此求和操作就不会受到影响。

泛型种类

泛型类

基本语法:

示例:

public class Generic<T> {//成员属性T value;public Generic(T value) {this.value = value;}//注意这不是泛型方法T getValue() {return this.value;}
}

注意点:

  1. 使用时才指定类型,不能是基本数据类型(泛型底层是通过Object实现的,基本类型不继承Object)
  2. 若不指定类型,则默认为Object
  3. 指定不同类型后他们实际上依然是该泛型类(即泛型只在编译期间有效,就是是所谓的泛型擦除

扩展:
对泛型类进行继承时应该注意以下两点:

泛型接口

泛型接口跟泛型类的使用基本上是一样的,在此不再赘述,但实现接口时依然要牢记以下两点:

泛型方法

泛型类和泛型接口都很容易理解,所以本文的重点是泛型方法,相信大家在学习泛型方法过程中会有几个疑问:

  1. 为啥使用到泛型成员的方法不是泛型方法
  2. 泛型方法有啥用

先抛出问题,相信看完接下来的案例之后就会恍然大悟。
语法:

可以发现泛型方法的申明要在返回值前加<>,也就是说只有加了这个尖括号的方法才是泛型方法,而上面的泛型类中的示例就不是泛型方法。
解惑:
先来看为什么要有泛型方法:
假如我们定义一个方法,用于返回给定任意类型的参数的String(虽然这是没有意义的),
既然要具有通用性,那么我们会想到用泛型来解决,因此定义了以下的方法:

其实我们定义了一个泛型类,然后里面的方法使用到了泛型,但是事与愿违,这个方法并不能返回任何类型参数的String,因为这个方法不是泛型方法,在创建泛型类时就把它指定成了Integer类型,当我们传入Long类型的参数时编译器就会报错。
接下来我们使用真正的泛型方法:

可以发现不再报错了,但是前面也说了这个方法实际上是没有意义的,因此下面我们定义一个有意义的方法:

给定类的字节码对象,然后返回一个该类的实列

我们会考虑:

  1. 给定类字节码创建对象肯定就调用字节码对象的newInstance方法
  2. 既然要通用,那么返回值是不确定的,那直接用Object没问题吧

于是就得出了以下代码:(请忽略类上的< T >)

可以发现能够正常运行,但是细心的你一定会发现调用方法后必须要强转类型!

所以就要使用泛型方法了:(请忽略类上的< T >)

至此关于泛型方法的一些疑惑相信都已经消失了吧!

注意点:

  1. 泛型方法中的泛型和泛型类的泛型是独立
  2. 如果static方法要使用泛型能力,就必须使其成为泛型方法(因为泛型类需要指定类型才能确定)

Java泛型方法解惑相关推荐

  1. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

  2. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  3. java 抽象泛型方法,Java泛型方法 - Only_小白的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java泛型是java一个重要特性.这里介绍的是Java泛型方法:主要是用于,一般情况下,我们在类定义上做泛型的声明,这样在整个类内部都可以使用泛型,有些情况下,我们不需要整个类做泛型声明,只希望在某 ...

  4. java泛型方法无参_从头再来:Java泛型(开发必须知道的)

    Java泛型 老规矩,测试一下,下面的程序能否正常运行?为什么? 开头测试题 泛型就是实现了参数化类型,也就是代码可以适用于多种类型.泛型是在编译期检查的,在编译期检查类型是否安全.我认为泛型最有用的 ...

  5. Java 泛型方法/接口、泛型限定

    一.为什么要定义泛型方法 1.从泛型类到泛型方法的演变过程 我们先来看个例子 //定义一个泛型类,并定义如下两个方法 class Test<T> {public void show(T t ...

  6. Java泛型方法的定义

    一 点睛 泛型方法主要用于容器类,Java中任何方法,包括静态的(注意,泛型类不允许在静态环境中使用)和非静态的,均可以用泛型来定义,而且和所在类是否是泛型没有关系. 下面是泛型方法的定义 [publ ...

  7. java泛型方法实现要点

    java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.优点是类型安全.消除强制类型转换.提高的运行效率. ...

  8. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

  9. Java泛型解惑上界通配符和下界通配符

    <? extends T>:是指 "上界通配符(Upper Bounds Wildcards)" <? super T>:是指 "下界通配符(Lo ...

  10. java 泛型方法 泛型类

    泛型方法 /*** 泛型方法的基本介绍* @param tClass 传入的泛型实参* @return T 返回值为T类型* 说明:* 1)public 与 返回值中间<T>非常重要,可以 ...

最新文章

  1. sklearn 归一化 和 标准化
  2. 分区和分片的区别_数据库的分表、分库、分片和分区等区别
  3. 网易云信SDK V3.2.0版发布啦!
  4. 源码与tarball套件管理程序笔记摘录
  5. 介绍一个能开发简单SAP UI5应用的在线IDE:StackBlitz
  6. how to find element's document section
  7. 如何像Uber一样给工程师派单,解放外包生产力?
  8. php 动态修改函数,php – 动态调用函数
  9. javascript创建对象过程
  10. 【TDA4系列】CCS 最新版本安装与教程地址
  11. 普元的ajax,普元EOS平台介绍
  12. 性能测试工具Jmeter对数据库Mysql进行连接并压测
  13. redis搭建集群时报错CLUSTERDOWN Hash slot not served
  14. opencv实现移动速度计算
  15. ISA防火墙之利用DHCP部署WPAD
  16. 奥比3d 摄像头 android,奥比中光3D传感摄像头Ubuntu系统安装ROS说明
  17. 算法笔记 分治:循环赛日程 棋盘覆盖 选择问题 输油管问题 整数因子分解
  18. win10 輸入法怎麽切換繁體
  19. Java_笛卡尔积计算
  20. Tesseract训练识别数字

热门文章

  1. 自动控制原理(来自于b站的笔记整理,深入理解自动控制框架)
  2. nginx过滤post请求头_nginx屏蔽指定请求头访问
  3. 网页上的时间显示设置
  4. js 微信聊天框的时间显示规则,以及输出的时间格式(已优化)
  5. 雨天美图大法:单图去雨的RESCAN新方式
  6. git gui :Updating the Git index failed. A rescan will be automatically started to res
  7. Android图片文件的压缩
  8. android外接键盘打汉字,安卓手机外接键盘怎么切换输入法?
  9. 微信小程序 转发功能实例讲解
  10. 使用xftp怎么向服务器传输文件,如何使用文件传输软件Xftp