- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java泛型讲述
Generic? extends List f = null; f = new GenericArrayList(); //Ok ..... f = new GenericVector(); //OK .... //以下语句会发生编译错误,因为HashMap没有实现List接口 f = new GenricHashMap(); 为通配符指定匹配上限 和限制泛型的上限相似,同样可以使用extends关键字限定通配符匹配类型的上限: incompatible types found : Genericjava.util.HashMap required: Generic? extends java.util.List f = new GenericHashMap(); //将f限定为只能代表采用java.sql.Date的父类实例化的实例 Generic? super java.sql.Date f = null; f=new Genericjava.sql.Date(); //Ok //Ok,java.util.Date是java.sql.Date的父类 f=new Genericjava.util.Date(); //错误,因为String不是java.sql.Date的父类 f=new GenericString(); 限定通配符匹配类型的下限 还可以使用super关键词将通配符匹配类型限定为某个类型及其父类型 GenericString f = new GenericString(); foo.setF(caterpillar); Generic? immutableF = f; //可读取泛型成员f中保存的字符串实例 System.out.println(immutableF.getF()); //可通过传递null参数来移除泛型成员f中保存的字符串实例 immutableF.setF(null); //不能通过immutableF的setF方法再次传递新的实例给类中 //泛型成员f,所以下面这行无法通过编译 immutableF.setF(wang); 通配符对泛型成员的影响 一旦对象使用通配字符声明,就无法利用它为类中的泛型成员传入新的实例,这时只能读取其中的泛型成员或者移除泛型成员存储的原有实例。 泛型默认类型的实例类型兼容性 实例化泛型类时采用默认泛型类型,此时泛型类的实例和其他给定类型的泛型类实例之间存在着类型兼容性,可以直接相互赋值。 使用泛型默认类型虽然可以做到类型的兼容性,但会失去泛型带来的编译时刻类型检查的优点。 GenericBoolean f1 = new GenericBoolean(); GenericInteger f2 = new GenericInteger(); Generic f = new Generic();//默认泛型类型 f = f1; //OK f = f2; //OK f1 = f; //OK f2 = f; //OK 通配符用作方法参数的局限性 考虑如下任务: 编写一个方法,该方法含有两个参数,一个参数类型为Object类型的数组,另一个参数类型为对应的强类型集合,需要将数组中的元素复制到集合中。考虑到通配符的作用,在类M中有如下的方法定义: class M{ /* aToC方法的参数c因为是用通配符表示的任意强类型的集合,而? 代表未知类型,编译器无法确定其具体的类型,所以会导致错误 */ public static void aToC(Object[] a,Collection? c){ for(Object o : a) c.add(o);//编译出错,此处可以用泛型方法解决 } } 泛型方法 不仅类可以声明泛型,类中的方法也可以声明仅用于自身的泛型,这种方法叫做泛型方法。其定义格式为: 访问修饰符 泛型列表 返回类型 方法名(参数列表){ 实现代码 } 其中泛型列表为用逗号分隔的合法Java标识符。 在泛型列表中声明的泛型,可用于该方法的返回类型声明、参数类型声明和方法代码中的局部变量的类型声明。 类中其他方法不能使用当前方法声明的泛型。 * * * * * * * * * * * * * * * * 泛型(Generics) 本章目录 强类型集合类 泛型类 泛型通配符 泛型方法 继承中的泛型 泛型接口和枚举 类型去除 集合类中的数据类型 集合类中可以存储各种数据,数据一旦存入,其类型均会转化为Object类型。 从集合类中取出数据时,一般均需要将Object类型转换回存入之前的实际类型 Vector v=new Vector();
文档评论(0)