尚硅谷_佟刚_Java基础_泛型.pdf

尚硅谷_佟刚_Java基础_泛型.pdf

ID:49849639

大小:1.81 MB

页数:13页

时间:2020-03-05

尚硅谷_佟刚_Java基础_泛型.pdf_第1页
尚硅谷_佟刚_Java基础_泛型.pdf_第2页
尚硅谷_佟刚_Java基础_泛型.pdf_第3页
尚硅谷_佟刚_Java基础_泛型.pdf_第4页
尚硅谷_佟刚_Java基础_泛型.pdf_第5页
资源描述:

《尚硅谷_佟刚_Java基础_泛型.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、泛型1.介绍下面是那种典型用法:ListmyIntList=newArrayList();//1myIntList.add(newInteger(0));//2Integerx=(Integer)myIntList.iterator().next();//3第3行的类型转换有些烦人。通常情况下,程序员知道一个特定的list里边放的是什么类型的数据。但是,这个类型转换是必须的(essential)。编译器只能保证iterator返回的是Object类型。为了保证对Integer类型变量赋值的类型安全,必须进行类型转换。当然,这个类型转换不仅仅带来了混乱,它还可能

2、产生一个运行时错误(runtimeerror),因为程序员可能会犯错。程序员如何才能明确表示他们的意图,把一个list(集合)中的内容限制为一个特定的数据类型呢?这就是generics背后的核心思想。这是上面程序片断的一个泛型版本:ListmyIntList=newArrayList();//1myIntList.add(newInteger(0));//2Integerx=myIntList.iterator().next();//3注意变量myIntList的类型声明。它指定这不是一个任意的List,而是一个Intege

3、r的List,写作:List。我们说List是一个带一个类型参数的泛型接口(agenericinterfacethattakesatypeparameter),本例中,类型参数是Integer。我们在创建这个List对象的时候也指定了一个类型参数。另一个需要注意的是第3行没了类型转换。现在,你可能认为我们已经成功地去掉了程序里的混乱。我们用第1行的类型参数取代了第3行的类型转换。然而,这里还有个很大的不同。编译器现在能够在编译时检查程序的正确性。当我们说myIntList被声明为List类型,这告诉我们无论何时何地使用myI

4、ntList变量,编译器保证其中的元素的正确的类型。实际结果是,这可以增加可读性和稳定性(robustness),尤其在大型的程序中。2.定义简单的泛型下面是从java.util包中的List接口和Iterator接口的定义中摘录的片断:publicinterfaceList{voidadd(Ex);Iteratoriterator();}publicinterfaceIterator{Enext();booleanhasNext();}这些都应该是很熟悉的,除了尖括号中的部分,那是接口List和Iterator中的形式类型参数的声明(the

5、declarationsoftheformaltypeparametersoftheinterfacesListandIterator)。类型参数在整个类的声明中可用,几乎是所有可以使用其他普通类型的地方在介绍那一节我们看到了对泛型类型声明List(thegenerictypedeclarationList)的调用,如List。在这个调用中(通常称作一个参数化类型aparameterizedtype),所有出现的形式类型参数(formaltypeparameter,这里是E)都被替换成实体类型参数(actualtypeargument)(这里

6、是Integer)。你可能想象,List代表一个E被全部替换成Integer的版本:publicinterfaceIntegerList{voidadd(Integerx)Iteratoriterator();}类型参数就跟在方法或构造函数中普通的参数一样。就像一个方法有形式参数(formalvalueparameters)来描述它操作的参数的种类一样,一个泛型声明也有形式类型参数(formaltypeparameters)。当一个方法被调用,实参(actualarguments)替换形参,方法体被执行。当一个泛型声明被调用

7、,实际类型参数(actualtypearguments)取代形式类型参数。一个命名的习惯:推荐用简练的名字作为形式类型参数的名字(如果可能,单个字符)。最好避免小写字母3.泛型和子类继承让我们测试一下我们对泛型的理解。下面的代码片断合法么?Listls=newArrayList();//1Listlo=ls;//2第1行当然合法,但是这个问题的狡猾之处在于第2行。这产生一个问题:一个String的List是一个Object的List么?大多数人的直觉是回答:“当然!”。好,在看下面的几行:lo.add(newOb

8、ject());//3Strings=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。