Effective Java之泛型

  泛型是Java在JDK1.5版本中引入的一个特性,泛型的出现大大增强了Java代码运行时的安全性,泛型主要应用于容器类中,因为这些类会包含各种各样的其他类,所以需要用泛型来对容器中所包含的类进行约束,比如为List传入一个String的类型参数,那么,这个List对象就只能包含有String类型的类,而不能向1.5之前的原始版本一样,可以包含各种不同的类,泛型的引入大大增强了集合类的约束,减少在使用集合类时报类型转换错误的概率。

  书里面建议,在使用数组时尽量采用泛型容器,而不是基本的数组类型,里面提到,数组类型具有协变性,但是泛型容器没有这一特性,这样就使得,为容器赋值的错误的代码能够在编译的阶段被发现,而不是运行的阶段,可以提高代码的质量,所谓协变性是指父类的引用指向子类的实例,比如,Object[] object = new String[3],object指向的是String的数组,但是,在泛型中,比如List<Object>和List<String>是没有父子关系的,所以泛型的数组就没有协变性。

  在泛型中,我感觉只需要弄清楚无限制类型参数和无限制通配符的概念就行了。无限制类型参数通常用一个字母表示,这个字母只能代表一种类型,当然,有无限制类型参数,那么相对应的就有一个有限制的类型参数,分为? extends  T 和 ? super T,前一个通常在生产者中使用,后一个通常在消费者中使用。无限制通配符就比较复杂了,原先在JDK1.5之前,容器中是不带参数的,里面的值都是用Object来表示,但这种表示方法存在的问题就是,无法保证同一个容器中所存储的值是相同类型的,所以采用了泛型的概念,无限制通配符用?表示,它的意思就是说我可以接受任何类型的参数,类似于Object但又不是Object,可以将?也看作是一个类型,这个类型可以指向任意的其他类型,但是又没有这个类型的存在,即不可能出现? x = new ?()的情况,所以在List<?>中,除了null,你不能加入任何其他的对象。

  泛型本人用的不多,在看书时看的也比较艰难,以上只是一些小小的理解。

时间: 2024-11-07 05:29:59

Effective Java之泛型的相关文章

Effective Java - 关于泛型

自Java 1.5开始使用的泛型,泛型给人比较直观的印象是..."尖括号里写了类型我就不用检查类型也不用强转了". 确实,那先从API的使用者的角度上想问题,泛型还有什么意义? Discover errors as soon as possible after they are made, ideally at compile time. 泛型提供的正是这种能力. 比如有一个只允许加入String的集合,在没有声明类型参数的情况下,这种限制通常通过注视来保证. 接着在集合中add一个I

Effective java -- 4 泛型

第二十三条:请不要在代码中使用原生态类型就是像Set这种待泛型的,就把泛型明确写出来. 第二十四条:消除非受检警告就是Set<String> sets = new HashSet();这种,第二个泛型不加会有一个警告. 第二十五条:列表优先于数组数组和泛型的区别: 数组是协变的.就是如果Sub是Super的子类型,那么Sub[]就是Super[]的子类型.泛型则是不可变的. 数组是可具体化的.一次数组会在运行时才知道并检查他们的元素类型约束. 第二十六条:优先考虑泛型类上加上泛型. 第二十七条

Effective Java 第三版——29. 优先考虑泛型

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 29. 优先考虑泛型 参数化声明并使用JDK提供的泛型类型和方法通常不会太困难. 但编写自己的泛型类型有点困难,但值得努力学习. 考虑条目 7中的简单堆栈实现: // Ob

Effective Java 第三版——32.合理地结合泛型和可变参数

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 32. 合理地结合泛型和可变参数 在Java 5中,可变参数方法(条目 53)和泛型都被添加到平台中,所以你可能希望它们能够正常交互; 可悲的是,他们并没有. 可变参数的目

Effective Java中的泛型部分

今天将Effective Java(第二版)中的泛型部分读完,深感自己泛型掌握有多么不熟练,还是需要多加练习. 废话少说,上点重点: 1.不要使用原型 比如: List list = new ArrayList(); 当你用该list引用指向其他带有泛型的List时,是不会出现编译错误的,只会给一个rawtype的警告,但是---- 这很容易出现挂羊头卖狗肉的情况,比如你指向了一个List<Integer>,却add了一个String,这不会出现任何编译错误,但 当你取出来转成Integer时

【总结】Effective java经验之谈,类与接口

转载请注明出处:http://blog.csdn.NET/supera_li/article/details/44940563 Effective Java系列 1.Effective java经验之谈,创建和销毁对象 2.Effective java经验之谈,泛型 3.Effective java经验之谈,类与接口 4.Effective java经验之谈,通用方法 5.Effective java经验之谈,枚举,注解,方法,通用设计,异常 6.Effective java经验之谈,并发编程

Effective java 中文版本阅读总结

点击链接查看云笔记原文 花了半天时间,贪婪的啃读了Effective java 这本书(虽然闻名已久,但是很少看书) 翻着翻着就有种废寝忘食的感觉,下班了都留下来专门看书,后来索性带回家看了. 以下是内容总结,主要是对个人感觉有用的,有很大部分没有提及,因为水平有限,还没有来得及消化 1 引言 2 创建和销毁对象 # 静态工厂方法由于构造器 Boolean.valueOf(String); 几乎总是优于构造器Boolean(String);构造器每次调用的时候都会创建一个新的对象 * 对象创建比

[Effective Java]第八章 通用程序设计

第八章      通用程序设计 45.      将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束外.如果变量是在“使用它的块”之外被声明有,当程序退出该块之后,该变量仍是可见的,如果它在目标使用区之前或之后意外使用,将可能引发意外错误. 几乎每个局部变量的声明都应该包含一个初始化表达式,如

【电子书】Effective Java中文版下载

下载地址: 点击打开链接 (需要资源0分的联系我~) <Effective Java中文版(第2版)>主要内容:在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案.通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰.健壮和高效的代码.第2版反映了Java 5中最重要的变化,并删去了过时的内容. <Effective Java中文版(第2版)>中的每条规则都以简短.独立的小文章形式出现,并