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 ...
随机推荐
- STM32CubeMX教程27 SDIO - 读写SD卡
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ...
- 解决idea登录github出现的invalid authentication data 404 not found以及登录 token 失效
0.错误提醒: Your token is invalid, please re-login github and get token again. 报错无效的用户名(invalid username ...
- 14.7 Socket 循环结构体传输
在上述内容中笔者通过一个简单的案例给大家介绍了在套接字编程中如何传递结构体数据,本章将继续延申结构体传输,在某些时候例如我们需要传输一些当前系统的进程列表信息,或者是当前主机中的目录文件,此时就需要使 ...
- 2.1 C/C++ 使用数组与指针
C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...
- Intel Arrow Lake处理器还是8+16 24核心:接口换LGA1851
Intel已经确认,将在今年内发布未来两代处理器Arrow Lake.Lunar Lake,其中前者将弥补Meteor Lake的不足,同时用于笔记本.桌面.服务器,现在它的核心规格流出了. 这份曝光 ...
- Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用
目录 一.Builder模式 二.工厂模式 三.单例模式 四.代理模式 五.组合模式 六.模板方式模式 七.适配器模式 八.装饰器模式 九.迭代器模式 虽然我们都知道有23种设计模式,但是大多停留在概 ...
- 在K8s中,提供的DNS组件是什么?有什么特性?
在Kubernetes (K8s)集群中,用于内部DNS服务的组件已经从早期的kube-dns过渡到了coredns. kube-dns(已弃用): 在Kubernetes 1.10版本之前,kube ...
- 用GPT4聊天制作AI绘画搞笑视频,播放量近10w,附GPT4开通教程
AI一天,人间一年 大家好,我是小卷,最近大家在视频号.抖音刷短视频时,是不是经常刷到那种用AI生成的聊天搞笑绘画视频.比如下面这个视频:南方小土豆来哈尔滨 又或者是AI眼中的各个大学 又或者是两个大 ...
- MySQL的CTE(公用表表达式)
(一)概念 MySQL的CTE是在MySQL8.0版本开始支持的,公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如select.insert.delete和update)的执行范围内存在. ...
- [Java]HashMap与ConcurrentHashMap的一些总结
HashMap与ConcurrentHashMap的一些总结 HashMap底层数据结构 JDK7:数组+链表 JDK8:数组+链表+红黑树 JDK8中的HashMap什么时候将链表转为红黑树? 当发 ...