一、使用泛型可以使避免程序在运行时发生异常。

使用泛型可以避免程序在运行时发生异常,如在容器中,指定具体的类型。当在该容器中添加元素时如果类型不是该容器的指定类型,就回提醒错误。从而避免了没有指定类型在迭代输出运行时抛出异常,(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());}}}

泛型的基本用法和代码演示相关推荐

  1. 代码演示C#各版本新功能

    代码演示C#各版本新功能 C#各版本新功能其实都能在官网搜到,但很少有人整理在一起,并通过非常简短的代码将每个新特性演示出来. 代码演示C#各版本新功能 C# 2.0版 - 2005 泛型 分部类型 ...

  2. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  3. 超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示)

    超详细八大排序+基数排序(图文并茂+动图演示+C语言代码演示) 插入排序-直接插入排序 插入排序-希尔排序 选择排序-直接选择排序 选择排序-堆排序 交换排序-冒泡排序 交换排序-快速排序-三种方法( ...

  4. OpenCV卡尔曼滤波介绍与代码演示

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 卡尔曼滤波原理 卡尔曼滤波最早可以追溯到Wiener滤波,不同的是 ...

  5. YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 YOLOv5在OpenVINO上的部 ...

  6. OpneCV3特征提取及匹配SURF算法(一)——SURF概述与代码演示

    前言 1.在目标检测.识别,匹配的应用中,特征点的提取是不可缺少的部分的步骤,在之前博文我演示了HOG特性提取与使用HOG与SVM训练自己的样本进行行人检测. 2.我的编程环境是Windows 7 6 ...

  7. 【图像处理】图像内插“最近邻插值 最近邻内插法(Nearest Neighbour Interpolate)”代码演示(调整图像大小、放大、缩小)

    文章目录 何为内插--最近邻插值,引用自<数字图像处理--第三版> 代码演示 1.设置缩放倍数来放大.缩小图像 2.设置图片最终分辨率来放大.缩小图像 代码中使用的源图 20200625 ...

  8. [深度学习] 自然语言处理 --- Self-Attention(二) 动画与代码演示

    一  Self Attention 动画演示 Step 1: Prepare inputs For this tutorial, we start with 3 inputs, each with d ...

  9. C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

    C++中 map的了解与基本用法(代码演示) 一:map的基本认识 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值) ...

最新文章

  1. c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)
  2. PAT甲级1017 Queueing at Bank:[C++题解]字符串、结构体、最小堆
  3. python怎么设置图的大小_python – 如何调整seaborn中的子图大小?
  4. 计算机系统不能更改,电脑系统时间怎么设定不能修改
  5. java写便签_如何编写一个便签程序(用Java语言编写)
  6. 2038: [2009国家集训队]小Z的袜子(hose)
  7. realme X50将于年前亮相:支持双模5G+120Hz刷新率屏幕
  8. fpga加载程序慢_可重构计算:基于FPGA可重构计算的理论与实践 1.器件架构 译文(一)...
  9. 【NLP入门】手把手带你CNN文本分类(附代码)
  10. 本周Asp.net源码更新(6.25-6.29)
  11. 服务器硬盘和台式机有什么区别,服务器和电脑主机有什么区别?
  12. android跑马灯源码,Android跑马灯的简单实现方式
  13. 飞思卡尔MC9S12G64串口发送接收驱动
  14. [乐意黎转载]“多情自古空余恨”的下句是什么?
  15. 【智慧旅游】以阿里飞猪为例浅谈产品升级策略
  16. 张德芬 如何自我成长
  17. windows10安装更新很慢ndows,Windows 10升级太慢了?这里有俩窍门
  18. 设计模式的七大原则——开闭原则(下)
  19. myeclipse下载git中的代码步骤
  20. 全球及中国射频器件市场规模格局与投资战略决策报告2022版

热门文章

  1. android小应用,只能播放一首歌的应用
  2. PostgreSQL数据库安装Version10.5
  3. 必备的Linux基础命令
  4. java+poodle漏洞修复_SSL3.0 POODLE漏洞修复方案
  5. springboot idea debug 模式下启动特别忙,且无法访问
  6. FTP服务器配置部分
  7. Android编译期代码生成之apt实践入门
  8. LinearLayout和RelativeLayout
  9. chrome插件:提取页面数据
  10. Matlab符号求导