Java 泛型举例
1 package com.bytezero.genericity;
2
3 import org.junit.Test;
4
5 import java.util.*;
6
7 /**
8 * @author Bytezero1·zhenglei! Email:420498246@qq.com
9 * create 2021-11-22 11:47
10 * 泛型的使用
11 * 1.jdk5.0新特性
12 *
13 * 2.在集合中使用泛型:
14 * 总结:
15 * 1.集合接口或集合类在jdk5.0时都修改为带泛型的结构
16 * 2.在实例化集合类时,可以指明具体的泛型类型
17 * 3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法 构造器 属性等..)使用到类的泛型位置,
18 * 都指定为实例化的泛型类型 比如 :add(E e) -->实例化以后:add(Integer e)
19 * 4.注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,拿包装类来替换
20 * 5.如果实例化时,没有指明泛型的类型,默认类型为 java.lang.Object类型
21 */
22 public class genericityTest {
23
24 //在集合中使用泛型之前的情况
25 @Test
26 public void test1(){
27 ArrayList list = new ArrayList();
28
29 //需求:存放学生的成绩
30 list.add(18);
31 list.add(28);
32 list.add(38);
33 list.add(48);
34 list.add(58);
35
36 //问题一:类型不安全
37 // list.add("Tom"); //类型错误
38
39 for(Object score : list){
40
41 //问题二 强转时 ,可能出现ClassCastException
42 int stuScore = (Integer) score;
43
44 System.out.println(stuScore);
45
46 }
47
48
49
50
51 }
52
53
54 //在集合中使用泛型的情况
55 @Test
56 public void test02(){
57 ArrayList<Integer> list = new ArrayList<Integer>();
58
59 list.add(18);
60 list.add(18);
61 list.add(18);
62 list.add(18);
63 list.add(18);
64 list.add(18);
65
66 //编译时 就会进行类型数据检查 保证数据的安全
67 // list.add("Tom");
68
69 //方式一:
70 // for(Integer score : list){
71 // //避免了强转的操作
72 // int stuScore = score;
73 //
74 // System.out.println(stuScore);
75
76 //方式二
77 Iterator<Integer> iterator = list.iterator();
78 while (iterator.hasNext()){
79 int stuScore = iterator.next();
80 System.out.println(stuScore);
81 }
82 }
83 //在集合中使用泛型的情况,以HashMap为例
84 @Test
85 public void test3(){
86 Map<String,Integer> map = new HashMap<String, Integer>() ;
87
88 map.put("Tom",89);
89 map.put("jer",59);
90 map.put("jon",29);
91 map.put("andi",99);
92
93 // map.put(123,"asf");
94 //泛型嵌套
95 Set<Map.Entry<String,Integer>>entry = map.entrySet();
96 Iterator<Map.Entry<String,Integer>> iterator = entry.iterator();
97
98 while (iterator.hasNext()){
99 Map.Entry<String, Integer> entry1 = iterator.next();
100 String key = entry1.getKey();
101 Integer value = entry1.getValue();
102 System.out.println(key + "-----" + value);
103 }
104
105 }
106
107
108
109
110 }
Java 泛型举例的更多相关文章
- java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...
- 初识Java泛型以及桥接方法
泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...
- Java泛型-内部原理: 类型擦除以及类型擦除带来的问题
一:Java泛型的实现方法:类型擦除 大家都知道,Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除.Java的泛型基本上都是在编译 ...
- java泛型 8 泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...
- Java泛型type体系
最近看开源代码,看到里面很多Java泛型,并且通过反射去获取泛型信息.如果说要看懂泛型代码,那还是比较容易,但是如果要自己利用泛型写成漂亮巧妙的框架,那必须对泛型有足够的了解.所以这两三天就不在不断地 ...
- java泛型应用实例 - 自定义泛型类,方法
近 短时间需要使用泛型,就研究了下,发现网上的问关于泛型的文章都是讲原理的, 很少有提到那里用泛型比较合适, 本文就泛型类和泛型方法的使用给出两 个典型应用场景. 例如一个toString的泛型方法, ...
- Java——泛型
前言 一般的类和方法,使用的都是具体的类型:基本类型或者自定义的类.如果我们要编写出适用于多种类型的通用代码,那么肯定就不能使用具体的类型.前面我们介绍过多态,多态算是一种泛化机制,但是也会拘泥于继承 ...
- 如何正确使用Java泛型
前言 Java 1.5之前是没有泛型的,以前从集合中读取每个对象都必须先进行转换,如果不小心存入集合中对象类型是错的,运行过程中转换处理会报错.有了泛型之后编译器会自动帮助转换,使程序更加安全,但是要 ...
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- Java 泛型优点之编译时类型检查
Java 泛型优点之编译时类型检查 使用泛型代码要比非泛型代码更有优势,下面是 Java 官方教程对泛型其中一个优点的介绍: "Stronger type checks at compile ...
随机推荐
- 原生js拖拽元素(onmouseup不能够触发的原因)
我们经常会遇见拖拽某一个元素的场景,拖拽也是很常用的: 这次拖拽遇见一个问题,有时在拖拽的时候吗,鼠标松开,元素仍然可以拖拽: 经过查阅资料,发现: 会触发H5原生的拖拽事件.并且不会监听到onmou ...
- CANVAS ----- 鼠标移动画圆
1.增加鼠标移动事件 $('#canvas').mousemove(function (e) { draw(event); }); 2.获取鼠标在canvas上的坐标 function getCanv ...
- 从零开始配置vim(21)——lsp简介与treesitter 配置
截止到上一篇文章,我们配置了neovim的很多内容了.具备了一些编辑器的常用功能了,而且可以胜任日常的文档编辑工作了.但是想作为一个可靠的代码编辑器还缺少重要的一环,即代码语法部分的支持. 在过去的v ...
- 在数据增强、蒸馏剪枝下ERNIE3.0分类模型性能提升
在数据增强.蒸馏剪枝下ERNIE3.0模型性能提升 项目链接: https://aistudio.baidu.com/aistudio/projectdetail/4436131?contributi ...
- 数据挖掘[一]---汽车车交易价格预测(测评指标;EDA)
题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池 相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据 ...
- 2.2 Windows驱动开发:内核自旋锁结构
提到自旋锁那就必须要说链表,在上一篇<内核中的链表与结构体>文章中简单实用链表结构来存储进程信息列表,相信读者应该已经理解了内核链表的基本使用,本篇文章将讲解自旋锁的简单应用,自旋锁是为了 ...
- Intel 4工艺太难了!酷睿Ultra终于突破5GHz
无论是14nm还是10nm,Intel这些年的新工艺都有一个通性:刚诞生的时候性能平平,高频率都上不去,只能用于笔记本移动端(分别对应5代酷睿.10代酷睿),后期才不断成熟,比如到了13代酷睿就达到史 ...
- Linux-cp命令常用选项
cp 命令是 Linux 中一个重要的命令,你可能经常会用到它.正如名称所示,cp 代表 复制(copy),它被用于在 Linux 命令行中复制文件和目录. 语法格式 mv [选项] 源文件或目录 目 ...
- JS模块化系统
随着 JavaScript 开发变得越来越广泛,命名空间和依赖关系变得越来越难以处理.人们已经开发出不同的解决方案以模块系统的形式来解决这个问题. CommonJS(CJS) CommonJS 是一种 ...
- STC8A8K64S4A12内部时钟的IRTRIM和LIRTRIM简单标定
STC8A8K64S4A12因为没有固化的频率调节值, 要么在STC-ISP烧录时设置写入, 要么通过idata高地址读取, 这对于Linux下的SDCC用户就非常不方便, 既不能用STC-ISP, ...