当前位置: 首页 > news >正文

java范型简介

java范型简介

一.简单认识java范型      

          经常听人说“范型”,我一直不是太明白什么叫“范型”,今天就查阅了一些文章,给我的第一感觉就是之所以在java中用范型,就是为了让一些错误在编译阶段就可以暴露出来,而不用在运行阶段才抛出异常。下面给出一个简单例子来说明。

 

    /** *//**
     * 没有利用范型的例子
     */
    public void example1()...{
        ArrayList array=new ArrayList();
        array.add("this is a string");
        array.add(new Integer(3));//这里可以正确添加
       
        Iterator iterator=array.iterator();
        while(iterator.hasNext())...{
            String str=(String)iterator.next();//编译时没错,但在运行时会抛出ClassCastException异常
            System.out.println(str);
        }   
    }运行以上程序,会抛出 java.lang.ClassCastException异常,而该异常是在程序运行过程中才会发现的,如果我们利用了范型,则在编译阶段就会发现异常,从而保证类型转换安全。如下面程序:    

public void example2()...{
        ArrayList<String> array=new ArrayList<String>();
        array.add("this is a string");
        //array.add(new Integer(3));//编译时会报异常:The method add(String) in the type ArrayList<String> is not applicable for the arguments(Integer)
       
        Iterator<String> iterator=array.iterator();
        while(iterator.hasNext())...{
            String str=iterator.next();//这里就不需要进行强制类型转换
            System.out.println(str);
        }   
    }
这样,我们在编译阶段就可以捕获可能存在地危险。

通过以上简单例子,我们可以看出,使用java范型的好处有:

内在的类型转换优于在外部的人工转换
类型的匹配问题在编译阶段就可以发现,而不用在运行阶段
二.创建自己的范型

任何类,接口,异常,方法都可以使用范型,下面是个简单的例子,使用范型来比较两个对象的大小,两个对象必须都实现了Comparable接口。

    public <T extends Comparable> T max(T t1, T t2) ...{
         if(t1.compareTo(t2) <= 0) ...{
            return t2;
        } else ...{
            return t1;
        }
    }
三.参考资料


本文来自CSDN博客 http://blog.csdn.net/hbcui1984/archive/2006/10/21/1344522.aspx

相关文章:

  • 敏捷软件开发实践-Sprint Retrospective Meeting(转)
  • WebSocket桌面客户端工具
  • docker与虚拟机性能比较
  • 匿名方法实现多线程同步到主线程执行
  • 又无题
  • 关于数据库自我描述功能的构思
  • POJ 3648 Wedding(2-ST)
  • topcoder srm 460 div1
  • ssh-agent
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 基于原型链劫持的前端代码插桩实践
  • Java动态代理机制——那些让你面试脱颖而出的技能 推荐
  • python正则表达式的使用
  • Nginx配置SSL实现服务器/客户端双向认证
  • reqeusts用法
  • ES6指北【2】—— 箭头函数
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ES6 学习笔记(一)let,const和解构赋值
  • Java 多线程编程之:notify 和 wait 用法
  • Java教程_软件开发基础
  • Netty源码解析1-Buffer
  • React16时代,该用什么姿势写 React ?
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Cloud Feign的两种使用姿势
  • SQLServer之索引简介
  • tweak 支持第三方库
  • VuePress 静态网站生成
  • 聚类分析——Kmeans
  • 入门级的git使用指北
  • 山寨一个 Promise
  • 数组大概知多少
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 追踪解析 FutureTask 源码
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​​​​​​​​​​​​​​Γ函数
  • # 飞书APP集成平台-数字化落地
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (floyd+补集) poj 3275
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)nsfocus-绿盟科技笔试题目
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net MySql
  • .net wcf memory gates checking failed
  • .net web项目 调用webService
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /etc/motd and /etc/issue