泛型的基本用法和代码演示
一、使用泛型可以使避免程序在运行时发生异常。
使用泛型可以避免程序在运行时发生异常,如在容器中,指定具体的类型。当在该容器中添加元素时如果类型不是该容器的指定类型,就回提醒错误。从而避免了没有指定类型在迭代输出运行时抛出异常,(ClassCastException)而且在迭代中不用做向下转型。
Collection<E> colobj = new Collection子类<E>(); Iterator<E> it = colobj.iterator();
package Generic;import java.util.ArrayList; import java.util.Iterator;public class GenericTest { /*** @param args*/public static void main(String[] args) {show1();show2();}public static void show2() {ArrayList<Person> al = new ArrayList<Person>();al.add(new Person("wangcaiyihao",18));al.add(new Person("xiaobai",12));al.add(new Person("xiaohei",28)); // al.add("skljrkwe"); 会在编辑时提醒有错。Iterator<Person> it =al.iterator();while(it.hasNext()){Person p = it.next();System.out.println(p.getName()+" >><< "+p.getAge());}}public static void show1() {ArrayList al = new ArrayList();al.add(new Person("wangcaiyihao",18));al.add(new Person("xiaobai",12));al.add(new Person("xiaohei",28)); // al.add("werer");//没有设置泛型,则不会提醒有错。Iterator it =al.iterator();while(it.hasNext()){Person p = (Person)it.next();System.out.println(p.getName()+" : "+p.getAge());}}}
二、当实现迭代输出 在装有不同类型元素的不同类型容器的元素时,可以是用泛型中的'?'通配符。
'?'通配符的三种运用方法。
1,因为各种容器都实现了Collection<E>接口。所以在接受时可以用Collection作为形参类型。
函数 格式 : 函数修饰符 iteratorFuntion(Collection<?> colobj) {
.......
Iterator<?> itt = colobj.iterator();
..........
}
package Generic;import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;public class GenericTest2 {/*** @param args*/public static void main(String[] args) {//ArrayList容器 String类型元素。 ArrayList<String> al = new ArrayList<String>();al.add("first");al.add("second");al.add("thred");al.add("fourth");//HashSet容器,Integer类型元素HashSet<Integer> tss = new HashSet<Integer>();tss.add(123);tss.add(126);tss.add(124);//TreeSet容器,Person类型元素。TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());ts.add(new Person("zhaosan",22));ts.add(new Person("lisi",24));ts.add(new Person("wangwu",21));ts.add(new Person("xiaoliu",29));iteratorFuntion(al);iteratorFuntion(tss);iteratorFuntion(ts);}
public static void iteratorFuntion(Collection<?> tss) {Iterator<?> itt = tss.iterator(); while(itt.hasNext()){System.out.println(itt.next());}}}
2,只接收E和E的子类。:上界
函数格式 函数修饰符 function(Collection<? extends E> colobj){
........
Iterator<? extends E> itt = colobj.iterator();
........
}
package Generic;import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;public class GenericTest2 {/*** @param args*/public static void main(String[] args) {//ArrayList容器 String类型元素。 ArrayList<String> al = new ArrayList<String>();al.add("first");al.add("second");al.add("thred");al.add("fourth");//HashSet容器,Integer类型元素HashSet<Worker> tss = new HashSet<Worker>();tss.add(new Worker("work02",31));tss.add(new Worker("work01",36));tss.add(new Worker("work03",33));//TreeSet容器,Person类型元素。TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());ts.add(new Person("zhaosan",22));ts.add(new Person("lisi",24));ts.add(new Person("wangwu",21));ts.add(new Person("xiaoliu",29));
// iteratorFuntion2(al);报错因为al不是Person或Person子类。iteratorFuntion2(tss);iteratorFuntion2(ts);}
public static void iteratorFuntion2(Collection<? extends Person> tss) {Iterator<? extends Person> itt = tss.iterator(); while(itt.hasNext()){System.out.println(itt.next());}}}
3,只接收E和E的父类。:下界
函数格式 函数修饰符 function(Collection<? super E> colobj){
........
Iterator<? super E> itt = colobj.iterator();
........
}
package Generic;import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;public class GenericTest2 {/*** @param args*/public static void main(String[] args) {//ArrayList容器 String类型元素。 ArrayList<String> al = new ArrayList<String>();al.add("first");al.add("second");al.add("thred");al.add("fourth");//HashSet容器,Integer类型元素HashSet<Worker> tss = new HashSet<Worker>();tss.add(new Worker("work02",31));tss.add(new Worker("work01",36));tss.add(new Worker("work03",33));//TreeSet容器,Person类型元素。TreeSet<Person> ts = new TreeSet<Person>(new ComparatorByName());ts.add(new Person("zhaosan",22));ts.add(new Person("lisi",24));ts.add(new Person("wangwu",21));ts.add(new Person("xiaoliu",29));
// iteratorFuntion2(al);报错因为al不是Worker或Worker父类。iteratorFuntion2(tss);iteratorFuntion2(ts);}
public static void iteratorFuntion2(Collection<? super Worker> tss) {Iterator<? super Worker> itt = tss.iterator(); while(itt.hasNext()){System.out.println(itt.next());}}}
泛型的基本用法和代码演示相关推荐
- 代码演示C#各版本新功能
代码演示C#各版本新功能 C#各版本新功能其实都能在官网搜到,但很少有人整理在一起,并通过非常简短的代码将每个新特性演示出来. 代码演示C#各版本新功能 C# 2.0版 - 2005 泛型 分部类型 ...
- Python Web框架Tornado的异步处理代码演示样例
1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...
- 超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示)
超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示) 插入排序-直接插入排序 插入排序-希尔排序 选择排序-直接选择排序 选择排序-堆排序 交换排序-冒泡排序 交换排序-快速排序-三种方法( ...
- OpenCV卡尔曼滤波介绍与代码演示
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 卡尔曼滤波原理 卡尔曼滤波最早可以追溯到Wiener滤波,不同的是 ...
- YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 YOLOv5在OpenVINO上的部 ...
- OpneCV3特征提取及匹配SURF算法(一)——SURF概述与代码演示
前言 1.在目标检测.识别,匹配的应用中,特征点的提取是不可缺少的部分的步骤,在之前博文我演示了HOG特性提取与使用HOG与SVM训练自己的样本进行行人检测. 2.我的编程环境是Windows 7 6 ...
- 【图像处理】图像内插“最近邻插值 最近邻内插法(Nearest Neighbour Interpolate)”代码演示(调整图像大小、放大、缩小)
文章目录 何为内插--最近邻插值,引用自<数字图像处理--第三版> 代码演示 1.设置缩放倍数来放大.缩小图像 2.设置图片最终分辨率来放大.缩小图像 代码中使用的源图 20200625 ...
- [深度学习] 自然语言处理 --- Self-Attention(二) 动画与代码演示
一 Self Attention 动画演示 Step 1: Prepare inputs For this tutorial, we start with 3 inputs, each with d ...
- C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)
C++中 map的了解与基本用法(代码演示) 一:map的基本认识 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值) ...
最新文章
- c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)
- PAT甲级1017 Queueing at Bank:[C++题解]字符串、结构体、最小堆
- python怎么设置图的大小_python – 如何调整seaborn中的子图大小?
- 计算机系统不能更改,电脑系统时间怎么设定不能修改
- java写便签_如何编写一个便签程序(用Java语言编写)
- 2038: [2009国家集训队]小Z的袜子(hose)
- realme X50将于年前亮相:支持双模5G+120Hz刷新率屏幕
- fpga加载程序慢_可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(一)...
- 【NLP入门】手把手带你CNN文本分类(附代码)
- 本周Asp.net源码更新(6.25-6.29)
- 服务器硬盘和台式机有什么区别,服务器和电脑主机有什么区别?
- android跑马灯源码,Android跑马灯的简单实现方式
- 飞思卡尔MC9S12G64串口发送接收驱动
- [乐意黎转载]“多情自古空余恨”的下句是什么?
- 【智慧旅游】以阿里飞猪为例浅谈产品升级策略
- 张德芬 如何自我成长
- windows10安装更新很慢ndows,Windows 10升级太慢了?这里有俩窍门
- 设计模式的七大原则——开闭原则(下)
- myeclipse下载git中的代码步骤
- 全球及中国射频器件市场规模格局与投资战略决策报告2022版