泛型

泛型简介

  1. 泛型可以理解为参数化类型,主要作用在类,方法和接口上。
  2. Java泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的模板开发的 , 目的是让开发者可以写出通用,灵活的代码 。
  3. 伪泛型 : Java中的泛型 , 是伪泛型 , Java 泛型开发好之后 , 在编译阶段就将泛型相关的信息消除了 , 不会泛型留到运行时。

泛型类型 :

  • 泛型方法 : 方法有参数 , 方法的参数 可以指定成一些 泛型 ;
  • 泛型类 : 类 也可以有参数 , 将 类型 作为 参数 传入类中 ;
  • 泛型接口 : 接口 的 参数 , 也可以是泛型 ;

将类型传入泛型方法 , 泛型类, 泛型接口中 , 可以动态地指定一些类型 ;
泛型的作用 :

  • 安全检查 : 在编译阶段 , 就可以进行 代码检查, 将更少的错误带到运行时 ;
  • 避免强转 : 避免类型的强转导致不必要的安全问题 ;
  • 提高性能 : 使用泛型可以提高 Java 的性能 ;

泛型类

泛型类 : 在类名后面使用声明泛型 , 则在该类中, 可以使用该泛型类型 T 类型 ;特别注意 , 该类中的 如下2个方法不是泛型方法 ; 其中的参数 , 返回值类型是T , 但这个T是作为一个正常的类型使用的 , 并不是声明在方法 中的泛型 ;
如果类,接口,方法是泛型类, 泛型接口,泛型方法, 则该类 , 接口 , 方法必须由 修饰 , 有个带尖括号的 T ;

    public T getData() {return data;}public void setData(T data) {this.data = data;}

完整的泛型类

/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 该方法不是泛型方法*  该方法是普通方法 , 返回值类型是 T 类型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;}
}

泛型方法

泛型方法 : 在方法的返回值前, 使用 声明泛型的方法 , 是泛型方法 ; 将某个类型作为参数传入 ;
泛型个数 : 该方法是泛型方法, 且指定了2个泛型 , 泛型的个数可以有很多个, 多个泛型之间 , 使用逗号隔开 ;
泛型方法 与 泛型类 中的泛型 :
泛型不同 : 泛型方法指定的泛型T与 类中的泛型T没有任何关系 , 这两个T 可以是不同的类型 ;
泛型相同 : 泛型方法中定义的泛型T , 与参数类型的T , 返回值类型的T , 方法内部的T , 都是同一个类型 ;

/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 泛型方法 , 是将某个类型作为参数传入*      方法指定泛型 , 写法如下** 该方法是泛型方法*      方法指定了 2 个泛型*      泛型个数 , 泛型的个数可以有很多个*      多个泛型之间 , 使用逗号隔开** 为方法指定的泛型 T 与类中的泛型 T 没有任何关系*      这两个 T 可以是不同的类型** 泛型方法中定义的泛型 T*      与参数类型的 T*      返回值类型的 T*      方法内部的 T*      都是同一个类型** 与泛型类中的 T 完全没有关系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}
}

静态方法的泛型

静态方法泛型 : 如果静态方法中使用了类中的泛型T, 作为参数或返回值 , 这种使用时错误的 ;
如果必须在静态方法中使用泛型T, 则该泛型T必须是静态方法的泛型 , 不能是类的泛型 ;
错误用法:
正确用法 :

泛型类与泛型方法完整示例

/*** 泛型类*  该 T 类型作为参数使用*  T 是参数化类型 , 可以由外部传入** @param <T>*/
public class Student<T> {private String name;private int age;/*** 该数据的类型未知*  使用泛型表示 , 运行时确定该类型*/private T data;public Student(String name, int age, T data) {this.name = name;this.age = age;this.data = data;}/*** 该方法不是泛型方法*  该方法是普通方法 , 返回值类型是 T 类型* @return*/public T getData() {return data;}public void setData(T data) {this.data = data;}/*** 泛型方法 , 是将某个类型作为参数传入*      方法指定泛型 , 写法如下 ;** 该方法是泛型方法*      方法指定了 2 个泛型*      泛型个数 , 泛型的个数可以有很多个*      多个泛型之间 , 使用逗号隔开** 泛型方法指定的泛型 T 与类中的泛型 T 没有任何关系*      这两个 T 可以是不同的类型** 泛型方法中定义的泛型 T*      与参数类型的 T*      返回值类型的 T*      方法内部的 T*      都是同一个类型** 与泛型类中的 T 完全没有关系** @param <T>* @param <A>* @return*/public <T, A> T getData2(T arg){T data = arg;return data;}/*** 如果静态方法中使用类 类中的泛型*      这种使用时错误的** 如果必须在 静态方法 中使用泛型 T*      则该泛型 T 必须是静态方法的泛型*      不能是类的泛型** @param arg* @return*/public static <T> T getData3(T arg){T data = arg;return data;}
}

Java泛型(泛型类,泛型方法,静态方法泛型,泛型类与泛型方法例子)相关推荐

  1. 什么是泛型,怎么使用泛型分析

    1.泛型 1:什么是泛型? 泛型就是广泛的类型,也是一种数据类型,而这种数据类型可以是任意类型,编写过程中当中不能确定类型,创建对象时必须指定具体类型,不指定也可以,但是会出现一些错误. 泛型是编译器 ...

  2. 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

    文章目录 一.泛型简介 二.泛型类 三.泛型方法 四.静态方法的泛型 五.泛型类与泛型方法完整示例 一.泛型简介 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; j ...

  3. java 泛型类 静态方法_JAVA——泛型类和泛型方法(静态方法泛型)

    泛型类定义的泛型,在整个类中有效.如果被方法是用,那么 泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了. 为了让不同的方法可以操作不同类型,而且类型还不确定.那么 可以将泛型定义在方 ...

  4. 【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

    文章目录 一.泛型类用法 二.泛型方法用法 三.泛型通配符 <?> 四.泛型安全检查 五.完整代码示例 1.泛型类 / 方法 2.main 函数 一.泛型类用法 泛型类用法 : 使用时先声 ...

  5. 泛型类、泛型方法及泛型应用

    泛型类.泛型方法及泛型应用 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口 ...

  6. 【蓝桥软件学院】泛型类、泛型方法及泛型应用

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  7. C#入门级——泛型、泛型类、泛型接口、泛型方法和泛型委托

    目录 一.泛型(generic) 二.为什么需要泛型类 类型膨胀 成员膨胀 使用object类 三.泛型的定义 定义泛型类 使用泛型类 泛型接口​​​​​​​ 两种泛型接口的实现方法 泛型方法 成员膨 ...

  8. java 泛型应用,通用返回类,泛型方法,泛型静态方法

    java 泛型应用,通用返回类,泛型方法,泛型静态方法 泛型简介 应用示例 静态方法增加泛型参数 调用静态公有方法 对比调用非静态公有方法(成员方法) 泛型简介 这里不多说明,详见 java泛型入门 ...

  9. 鸟欲高飞先振翅,人求上进先读书 [泛型 泛型类 泛型方法 泛型接口 泛型通配符详解]

    文章目录 5. 泛型 5.1 泛型概述[理解] 5.2 为什么会引入泛型? 5.3 泛型的好处 5.4 泛型的定义格式 5.5 泛型类[应用] 5.6 泛型方法 5.7 泛型接口[应用] 5.8类型通 ...

最新文章

  1. 人工智能图像到图像转换图像分割任务中语义一致的图像到图像转换
  2. 中波磁棒天线在接收150kHz导航信号方向性
  3. (JAVA学习笔记) 如何计算2*8效率高(面试题)—— 左移和右移问题。
  4. 一个WCF RESTSOAP Post例子
  5. Android怎么导入Moudle
  6. leetocde —— 114. 二叉树展开为链表
  7. MyBatis学习笔记(三) 关联关系
  8. mysql for update死锁_Mysql 数据库死锁过程分析(select for update)
  9. 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)
  10. hud android,Android 加载等待控件 ZFProgressHUD
  11. 计算机专业英语词汇大全
  12. 如何实现图片和图题的组合
  13. 手把手教你如何连接阿里云RDS云数据库
  14. 制定项目目标利器SMART原则
  15. 人类小行星探测任务回顾
  16. Kali 2022.2 安装
  17. 华为服务器做系统蓝屏,服务器安装2008r2后蓝屏
  18. 论文阅读笔记:vTPM
  19. 交换机与路由器配置-利用OSPF协议实现网络互联
  20. C#:if (!IsPostBack)作用

热门文章

  1. [爬虫] 爬取高德地图的面状数据存为shp - 公园数据为例
  2. 海南省三亚市谷歌卫星地图下载
  3. 印刷报价系统源码_皇家印刷术-设计系统案例研究
  4. Unity实现十进制转十六进制功能
  5. idea 导出war包之正确姿势
  6. python下的四舍五入
  7. Vue学习:noscript标签
  8. 小白量化学习(1)准备环境
  9. 1、Java概述——Java转义字符
  10. C语言 fprintf写入文件