欢迎来到天天文库
浏览记录
ID:20317303
大小:534.25 KB
页数:30页
时间:2018-10-12
《12泛型程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第12章泛型程序设计1、从Java程序设计语言1.0版发布以来,变化最大的部分就是泛型。专家组花费了5年左右的时间用来定义规范和测试实现!2、使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。泛型对于集合类尤其有用,例如,ArrayList就是一个无处不有的集合类。即可以写成ArrayList2、String和File对象分别设计不同的类。实际上,也不需要这样做,因为一个AirayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。{聚集String和File对象与ArrayList类有唔关系呀?关系就在于ArrayList3、个长度!tion){}//集合Collection转换成数组列表ArrayListpublicintsize(){return;mentData,size);privatestaticfinallongserialVersionUID=8683452581122892189L;privatetransientObjectelementData[];privateintsize;分析:这样的实现有两个问X1)当获取一个值时必须进行强制类型转换ArrayListfiles=newArrayList();Stringfilename=(String)files,get(0);2)此4、外,这里没有错误检査,可以向数组列表中添加任何类的对象。files,add(newFile对于这个调用,编译和运行都不会出错。然而在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误。3、泛型提供了一个更好的解决方案:类型参数(typeparameters)。【针对上而的类型强制转换和安全问题!】1)如上例的ArrayList类用一个类型参数用来指示元素的类型:ArrayListfiles=newArrayList5、好地利用这个信息。当调用get的时候,不耑要进行强制类型转换,编译器就知道返回值类型力String,而不是Object。Stringfilename=files,get(0);程序具有更好的可读性和安全性,3)编译器还知道ArrayLisKString〉屮add方法有一个类型为String的参数。这将比使用Object类型的参数安全一些。现在,编译器可以进行检查,避免插入错误类型的对象。例如:files.add(newFile是无法通过编译的。因为增加的不是String类型。4)出现编译错误比类在运行吋出现类的强制类型转换异常要好得多。类型参数的魅力在于:4、谁想成为泛型程序6、员?1)使用像ArrayList〈String>的泛型类很容易...2)通配符类型(wildcardtype)12.2简单泛型类的定义1、一个泛型类(Genericclass)就是具有一个或多个类型变量的类。下而使用一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不要为数据存储的细节烦悩。{难道这就是只有一个T类型的原因吗?你可以用publicclassPair{...},这样你可以定义两种类型了,T和U!!!}//去掉里面的null赋值也可以!publicclassPair{privateTfirst;privateTsecond;publi7、cPair(){first=null;second=null;publicPair(Tfirst,Tsecond){this.first=first;this.second=second;}//get和set方法publicTgetFirst(){returnfirst;}publicTgetSecond(){returnsecond;}publicvoidsetFirst(TnewValue){first=newValue;}publicvoidsetSecond(TnewValue){second=
2、String和File对象分别设计不同的类。实际上,也不需要这样做,因为一个AirayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。{聚集String和File对象与ArrayList类有唔关系呀?关系就在于ArrayList3、个长度!tion){}//集合Collection转换成数组列表ArrayListpublicintsize(){return;mentData,size);privatestaticfinallongserialVersionUID=8683452581122892189L;privatetransientObjectelementData[];privateintsize;分析:这样的实现有两个问X1)当获取一个值时必须进行强制类型转换ArrayListfiles=newArrayList();Stringfilename=(String)files,get(0);2)此4、外,这里没有错误检査,可以向数组列表中添加任何类的对象。files,add(newFile对于这个调用,编译和运行都不会出错。然而在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误。3、泛型提供了一个更好的解决方案:类型参数(typeparameters)。【针对上而的类型强制转换和安全问题!】1)如上例的ArrayList类用一个类型参数用来指示元素的类型:ArrayListfiles=newArrayList5、好地利用这个信息。当调用get的时候,不耑要进行强制类型转换,编译器就知道返回值类型力String,而不是Object。Stringfilename=files,get(0);程序具有更好的可读性和安全性,3)编译器还知道ArrayLisKString〉屮add方法有一个类型为String的参数。这将比使用Object类型的参数安全一些。现在,编译器可以进行检查,避免插入错误类型的对象。例如:files.add(newFile是无法通过编译的。因为增加的不是String类型。4)出现编译错误比类在运行吋出现类的强制类型转换异常要好得多。类型参数的魅力在于:4、谁想成为泛型程序6、员?1)使用像ArrayList〈String>的泛型类很容易...2)通配符类型(wildcardtype)12.2简单泛型类的定义1、一个泛型类(Genericclass)就是具有一个或多个类型变量的类。下而使用一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不要为数据存储的细节烦悩。{难道这就是只有一个T类型的原因吗?你可以用publicclassPair{...},这样你可以定义两种类型了,T和U!!!}//去掉里面的null赋值也可以!publicclassPair{privateTfirst;privateTsecond;publi7、cPair(){first=null;second=null;publicPair(Tfirst,Tsecond){this.first=first;this.second=second;}//get和set方法publicTgetFirst(){returnfirst;}publicTgetSecond(){returnsecond;}publicvoidsetFirst(TnewValue){first=newValue;}publicvoidsetSecond(TnewValue){second=
3、个长度!tion){}//集合Collection转换成数组列表ArrayListpublicintsize(){return;mentData,size);privatestaticfinallongserialVersionUID=8683452581122892189L;privatetransientObjectelementData[];privateintsize;分析:这样的实现有两个问X1)当获取一个值时必须进行强制类型转换ArrayListfiles=newArrayList();Stringfilename=(String)files,get(0);2)此
4、外,这里没有错误检査,可以向数组列表中添加任何类的对象。files,add(newFile对于这个调用,编译和运行都不会出错。然而在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误。3、泛型提供了一个更好的解决方案:类型参数(typeparameters)。【针对上而的类型强制转换和安全问题!】1)如上例的ArrayList类用一个类型参数用来指示元素的类型:ArrayListfiles=newArrayList5、好地利用这个信息。当调用get的时候,不耑要进行强制类型转换,编译器就知道返回值类型力String,而不是Object。Stringfilename=files,get(0);程序具有更好的可读性和安全性,3)编译器还知道ArrayLisKString〉屮add方法有一个类型为String的参数。这将比使用Object类型的参数安全一些。现在,编译器可以进行检查,避免插入错误类型的对象。例如:files.add(newFile是无法通过编译的。因为增加的不是String类型。4)出现编译错误比类在运行吋出现类的强制类型转换异常要好得多。类型参数的魅力在于:4、谁想成为泛型程序6、员?1)使用像ArrayList〈String>的泛型类很容易...2)通配符类型(wildcardtype)12.2简单泛型类的定义1、一个泛型类(Genericclass)就是具有一个或多个类型变量的类。下而使用一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不要为数据存储的细节烦悩。{难道这就是只有一个T类型的原因吗?你可以用publicclassPair{...},这样你可以定义两种类型了,T和U!!!}//去掉里面的null赋值也可以!publicclassPair{privateTfirst;privateTsecond;publi7、cPair(){first=null;second=null;publicPair(Tfirst,Tsecond){this.first=first;this.second=second;}//get和set方法publicTgetFirst(){returnfirst;}publicTgetSecond(){returnsecond;}publicvoidsetFirst(TnewValue){first=newValue;}publicvoidsetSecond(TnewValue){second=
5、好地利用这个信息。当调用get的时候,不耑要进行强制类型转换,编译器就知道返回值类型力String,而不是Object。Stringfilename=files,get(0);程序具有更好的可读性和安全性,3)编译器还知道ArrayLisKString〉屮add方法有一个类型为String的参数。这将比使用Object类型的参数安全一些。现在,编译器可以进行检查,避免插入错误类型的对象。例如:files.add(newFile是无法通过编译的。因为增加的不是String类型。4)出现编译错误比类在运行吋出现类的强制类型转换异常要好得多。类型参数的魅力在于:4、谁想成为泛型程序
6、员?1)使用像ArrayList〈String>的泛型类很容易...2)通配符类型(wildcardtype)12.2简单泛型类的定义1、一个泛型类(Genericclass)就是具有一个或多个类型变量的类。下而使用一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不要为数据存储的细节烦悩。{难道这就是只有一个T类型的原因吗?你可以用publicclassPair{...},这样你可以定义两种类型了,T和U!!!}//去掉里面的null赋值也可以!publicclassPair{privateTfirst;privateTsecond;publi
7、cPair(){first=null;second=null;publicPair(Tfirst,Tsecond){this.first=first;this.second=second;}//get和set方法publicTgetFirst(){returnfirst;}publicTgetSecond(){returnsecond;}publicvoidsetFirst(TnewValue){first=newValue;}publicvoidsetSecond(TnewValue){second=
此文档下载收益归作者所有