分类 公告通知 成绩职位表 考前培训 模拟真题 热点.资讯 申论.行测

Java的泛型讲解

 

 今儿为大家讲解的是JDK5.0支持的新功能Java的泛型。,JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化。
   
    1、Java泛型
   
    其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一
   
    样的,这样写class Java_Generics<K,V>,这里边的K和V就象方法中的参数str1和str2,也是可变。
   
    1.1. 泛型通配符
   
    下面我们先看看这些程序:
   
    //Code list 2
   
    void TestGen0Medthod1(List l){
   
    for (Object o : l)
   
    System.out.println(o);}
   
    看看这个方法有没有异议,这个方法会通过编译的,假如你传入String,就是这样List<String>.接着我们调用它,问题就出现了,我们将一个List<String>当作List传给了方法,JVM会给我们一个警告,说这个破坏了类型安全,因为从List中返回的都是Object类型的。
   
    1.2. 编写泛型类要注意:
   
    1)在定义一个泛型类的时候,在"<>"之间定义形式类型参数,例如:"class TestGen<K,V>",其中"K", "V"不代表值,而是表示类型。
   
    2)实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如:TestGen<String,String>t=new TestGen<String,String>();
   
    3)泛型中<K extends Object>,extends并不代表继承,它是类型范围限制。
   
    2、泛型与数据类型转换
   
    2.1. 消除类型转换
   
    在JDK5.0中我们完全可以这么做,这里我们使用泛化版本的HashMap,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全。上面是String映射到String,也可以将Integer映射为String,只要写成HashTable<Integer,String>h=new HashTable<Integer,String>();h.get(new Integer(0))返回value.果然很方便。
   
    2.2 自动解包装与自动包装的功能
   
    从上面有没有看到有点别扭啊,h.get(new Integer(123))这里的new Integer(123);好烦的,在JDK5.0之前我们只能忍着了,现在这种问题已经解决了,请看下面这个方法。我们传入一个int这一基本型别,然后再将i的值直接添加到List中,其实List是不能储存基本型别的,List中应该存储对象,这里编译器将int包装成Integer,然后添加到List中去。接着我们用List.get(0);来检索数据,并返回对象再将对象解包装成int.恩,JDK5.0给我们带来更多方便与安全。
   
    2.3 限制泛型中类型参数的范围
   
    也许你已经发现在code list 1中的TestGen<K,V>这个泛型类,其中K,V可以是任意的型别。也许你有时候呢想限定一下K和V当然范围,怎么做呢?看看如下的代码:
   
    //Code list 8
   
    class TestGen2<K extents String,V extends Number>
   
    {private V v=null;
   
    private K k=null;
   
    public void setV(V v){
   
    this.v=v;}
   
    public V getV(){
   
    return this.v;}
   
    public void setK(K k){
   
    this.k=k; }
   
    public V getK(){
   
    return this.k; }
   
    public static void main(String[] args)
   
    {TestGen2<String,Integer>t2=new TestGen2<String,Integer>();
   
    t2.setK(new String("String"));
   
    t2.setV(new Integer(123));
   
    System.out.println(t2.getK());
   
    System.out.println(t2.getV());}}
   
    上边K的范围是<=String ,V的范围是<=Number,注意是"<=",对于K可以是String的,V当然也可以是Number,也可以是Integer,Float,Double,Byte等。看看下图也许能直观些请看上图A是上图类中的基类,A1,A2分别是A的子类,A2有2个子类分别是A2_1,A2_2.然后我们定义一个受限的泛型类class MyGen<E extends A2>,这个泛型的范围就是上图中兰色部分。这个是单一的限制,你也可以对型别多重限制,如下:class C<T extends Comparable<? super T>& Serializable>我们来分析以下这句,T extends Comparable这个是对上限的限制,Comparable<super T>这个是下限的限制,Serializable是第2个上限。一个指定的类型参数可以具有一个或多个上限。具有多重限制的类型参数可以用于访问它的每个限制的方法和域。

 


   >>学课在线网课试听.报名        >>学课在线智能题库.模拟做题       >>直播课程       >>录播课程

课程名称
课程免费试听
课程名称
课程免费试听
课程名称
课程免费试听
初级会计师

一级建造师

执业药师

中级会计师

二级建造师

护士资格证

注册会计师

一级造价工程师

健康管理师

经济师考试

监理工程师

考研辅导课

银行从业

安全工程师

自考课程

基金从业

一级消防工程师

心理咨询师

企业人力资源管理师

法律职业资格考试

公共营养师

社会工作者

消防设施操作员

保育员

教师资格证

成人高考

育婴师

公务员培训

文职培训

英语四六级

计算机软考
养老护理员
税务师培训

房产经纪人
咨询工程师

其它课程>>



重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。

昆明学历中心:◆咨询电话:0871-65385921、13312528471 赖老师、钱老师(微信报名:17787865775)点击这里给我发消息


云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)点击这里给我发消息


总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn   点击这里立即咨询我们



地州分校:   大理分校   丽江分校   迪庆分校   怒江分校   红河分校   临沧分校   玉溪分校   文山分校   保山分校   德宏分校   昭通分校   普洱分校   版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;2021年云南省成人高考>>立即报名



职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)点击这里咨询我们  

公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)点击这里立即咨询我们






温馨提示:因考试政策、内容不断变化与调整,学课在线网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

免责声明:以上内容仅代表原创者观点,其内容未经本站证实,学课在线网对以上内容的真实性、完整性不作任何保证或承诺,转载目的在于传递更多信息,由此产生的后果与学课在线网无关;如以上转载内容不慎侵犯了您的权益,请联系我们QQ:1536696595,我们将会及时处理。




网友评论