泛型 (Generics)一定是最易懂简单的
文章目录
- 前言
- 一、“形象比喻”
- 二、T、E、K、V、?的含义
- 三、泛型类
- 总结
前言
泛型(Generics)是在JDK 1.5 中推出的,其主要的目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构。
一、“形象比喻”
首先,容器就相当于一个大桶,什么都可以向里面放。假设一个容器是你家的冰箱你可以向里面放猪肉,羊肉,牛肉,鱼肉,鸭肉等等,想放啥就放啥。放到时候很爽吧,但是有一天你想吃牛肉了,怎么办?还需要一个一个拿出来检查是不是牛肉,傻傻的分不清,是不是就很烦了。那我们应该怎么办?是不是可以这样,冰箱的每一格都给它贴上标签。放牛肉的就贴牛肉的标签,羊肉的贴羊肉标签……意味着在贴有牛肉的一格中放的时候就全部放牛肉,取的时候是不是就特别简单了,随便取就是牛肉了。泛型就是起到一个这样的作用,相当于在我们的容器上贴一个这样的标签,这样就可以帮助我们建立一个类型安全的集合了。专业点的说法——泛型的本质就是 “数据类型的参数化”。我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
二、T、E、K、V、?的含义
1、可以认为的标准含义
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类) T代表在调用时的指定类型
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型 一般用在通配
我们可以在类的声明处增加泛型列表,如:“class 名称<泛型列表>” <>中可以为<T,E,V>其实这里的字符其实可以为任何的标识符。
三、泛型类
我们可以使用 “class 名称<泛型列表>” 声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类如:
class People < E > class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型>{private 泛型标识 /*(成员变量类型)*/ var; .....}
}
其中,People是泛型类的名称,E是其中的泛型,也就是说并没有指定E是何种类型的数据,它可以是任何类或接口,但不能是基本类型数据。也可以不用E表示泛型,任何一个合理的标识符都可以,但最好和我们熟悉的类型名称有所区别。泛型声明时,“泛型列表”给出的泛型可以作为类的成员变量的类型、方法的类型、以及局部变量的类型。
意思就是说我们在定义一个类时可以在类的后面跟着一个< E >,形象一下就是,类就相当于你家,而泛型就相当于你家门前横刀立马的“守门人”,你和他说 Int 可以进你家 那么它就只会把 Int 放进去,这样就有一个好处,如果你想找一个 Int 类型的人,去这个家里找就可以了就不用再通过"中间人" ——Int() (转型)的介绍了。
public class TestGeneric {public static void main(String[] args) {MyCollection<String> mc= new MyCollection<String>(); //泛型为String类型mc.set("泛型", 0);// mc.set(888, 1);//The method set(String, int) in the type MyCollection<String> is not applicable for the arguments (int, int) //如果传入888数字类型就会报错,这就是泛型,规定好了你传入的类型,其他类型无法进入。String b = mc.get(0);System.out.println(b); //输出结果为 " 泛型 "}
}
class MyCollection<E> { // 犹如“形参”的泛型Object[] objs = new Object[5];public void set(E e, int index){ // 传入objs[index] = e;}public E get(int index){ //取值return (E) objs[index];}
}
问题所在
// mc.set(888, 1);
//The method set(String, int) in the type MyCollection is not applicable for the arguments (int, int)
//如果传入888数字类型就会报错,这就是泛型,规定好了你传入的类型,其他类型无法进入。
总结
Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表,散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查。
泛型 (Generics)一定是最易懂简单的相关推荐
- java的知识点23——泛型Generics、Collection接口、List特点和常用方法、 ArrayList特点和底层实现
泛型Generics 一般通过"容器"来容纳和管理数据.程序中的"容器"就是用来容纳和管理数据. 数组就是一种容器,可以在其中放置对象或基本类型数据. 数组的优 ...
- Java基础学习——泛型(generics)学习一
概述 在JDK 5.0,Java语言引入了好几个新的功能,其中很重要的一个就是泛型(generics). 本文就是对泛型的一个概述.你可以很熟悉其他语言中的类似结构,比如C++里的模板(templat ...
- 【TS】泛型 Generics
泛型Generics,是指在定义函数Function.接口Interface 或类 Class 时不预先指定具体的类型,而是在使用的时候再指定类型的一种特征. // 函数名后的 <> 内传 ...
- Java基础 --- 泛型 Generics
Java基础 --- 泛型 Generics 为什么需要泛型 泛型 Bounds for Type Variable Java虚拟机如何处理泛型 --- 泛型擦除 Restrictions and L ...
- 27.泛型generics.rs
/* fn max(array: &[i32]) -> i32 {let mut max_index = 0;let mut i = 1;while i < array.len() ...
- java基础知识(七)-- 泛型(Generics )
介绍 用法: List list = new ArrayList();// 1 list .add(new Integer(12));// 2 Integer x = (Integer) list . ...
- Rust泛型Generics
泛型 泛型(Generics)是一种程序设计风格,它允许程序员在强类型语言(例如rust,c#,c++)中编写代码时使用通用类型.以rust为例,如果你想实现一个通用的add函数,让其在u8, i32 ...
- Java 泛型(Generics) 综述
一. 引子 一般的类和方法,只能使用具体类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 多态 算是一种泛化机制,但对代码的约束还是太强 ...
- Java泛型Generics
转载请标明出处: http://blog.csdn.net/wu_wxc/article/details/51493181 本文出自[吴孝城的CSDN博客] 泛型 泛型是JDK 5中引入的一个新特性 ...
最新文章
- 数据库学习day_02:表格相关sql语句 / 表格数据相关sql语句 / sql中的数据类型 / 导入外部sql文件 / 去重.是否为null.and与or.in.[x,y]
- java笔记 -- GregorianCalendar和DateFormateSymbols 类方法
- PMP-【第10章 项目沟通管理】-2021-2-16(220页-231页)
- 点击左侧导航栏切换右侧商品(左右联动)
- 云炬随笔20171209
- c#开发中遇到System.AccessViolationException
- 计算机视觉,不可能凉!
- 前端组件化的三种方案:
- oracle的local,11G R2 Oracle Local Registry(OLR)
- [C++]Linux之C编程异常[true未定义解决方案]
- pytorch/tensorflow 查看 cuda 是否可用
- H3CSE路由-BGP属性
- canoco5主成分分析步骤_权重赋值之“主成分分析法”
- l351墨水灯和缺纸灯闪烁_爱普生l351充墨灯闪烁是怎么回事?
- 如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。编程计算并输出所有的n的所有情况。
- 华为最终面试java_最全的华为面试题-java学习
- 惠普服务器做linux系统安装系统教程,HP刀片服务器安装系统步骤
- vscode使用ssh连接远程Ubuntu服务器(记录)
- 第一章第十三题(代数:求解2 × 2线性方程组)(Algebra: solve 2 × 2 linear equations)
- mysql 命令行登录详解
热门文章
- html模板文件打开空白,Webpack打包index打开空白
- java动态修改class_Java Agent入门学习之动态修改代码
- MySQL workbench创建用户与授权
- MapUtils常用方法
- SPOJ 20713 DIVCNT2 - Counting Divisors (square)
- 【medium】220. Contains Duplicate III
- 每天学一点ubuntu指令
- Python基础 - MySQLdb模块
- Ubuntu 下无法Tab键自动补全功能解决办法
- Bootstrap系列 -- 17. 复选框checkbox和单选择按钮radio