java泛型接口.泛型类泛型方法.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
泛型可提高代码的高扩展性和重用率. 1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 3、泛型的类型参数可以有多个。 4、泛型的参数类型可以使用extends语句,例如T extends superclass。习惯上称为“有界类型”。 5、泛型的参数类型还可以是通配符类型。例如Class? classType = Class.forName(java.lang.String); 泛型可以用在接口,类方法,集合上面. 泛型接口: ? interface testGenericsT{ ? ? ? T getT(T t); ? ? ? String assume(T t); ? ? } 泛型类:  public class GenericsFooT {   private T x;   public GenericsFoo(T x) {   this.x = x;   }   public T getX() {   return x;   }   public void setX(T x) {   this.x = x;   }   } 使用T来声明一个类型持有者名称,然后就可以把T当作一个类型代表来声明成员、参数和返回值类型。   当然T仅仅是个名字,这个名字可以自行定义。 泛型方法:  是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:   public class ExampleA {   public T void f(T x) {   System.out.println(x.getClass().getName());   } 使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。 限制泛型的可用类型:   在上面的例子中,由于没有限制class GenericsFooT类型持有者T的范围,实际上这里的限定类型相当于Object,这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类型。只需要这么做:   class GenericsFooT extends Collection,这样类中的泛型T只能是Collection接口的实现类,传入非Collection接口编译会出错。   注意:T extends Collection这里的限定使用关键字 extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现Collection接口的类型,或者T是继承了XX类的类型。   下面继续对上面的例子改进,我只要实现了集合接口的类型:   public class CollectionGenFooT extends Collection {   private T x;   public CollectionGenFoo(T x) {   this.x = x;   }   public T getX() {   return x;   }   public void setX(T x) {   this.x = x;   }   } 通配符泛型:  为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了“通配符泛型”,针对上面的例子,使用通配泛型格式为? extends Collection,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为:   public class CollectionGenFooDemo {   public static void main(String args[]) {   CollectionGenFooArrayList listFoo = null;   listFoo = new CollectionGenFooArrayList(new ArrayList());   //现在不会出错了   CollectionGenFoo? extends Collection listFoo1 = null;   listFoo=new CollectionGenFooArrayList(new ArrayList());   System.out.println(实例化成功!);   }   }   注意:   1、如果只指定了?,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。   2、通配符泛型不单可以向下限制,如? extends Collection,还可以向上限制,如? super Doub

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档