欢迎来到天天文库
浏览记录
ID:8805832
大小:38.00 KB
页数:5页
时间:2018-04-08
《java泛型接口泛型类泛型方法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、泛型可提高代码的高扩展性和重用率.1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。3、泛型的类型参数可以有多个。4、泛型的参数类型可以使用extends语句,例如。习惯上称为“有界类型”。5、泛型的参数类型还可以是通配符类型。例如Class>classType=Class.forName("java.lang.String");泛型可以用在接口,类方法,集合上面.泛型接口: interfacetestGenerics{
2、 TgetT(Tt); Stringassume(Tt); }泛型类: publicclassGenericsFoo{ privateTx; publicGenericsFoo(Tx){ this.x=x; } publicTgetX(){ returnx; } publicvoidsetX(Tx){ this.x=x; } }使用来声明一个类型持有者名称,然后就可以把T当作一个类型代表来声明成员、参数和返回值类型。 当然T仅仅是个名字,这个名字可以自行定义。泛型方法: 是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛
3、型方法,只需将泛型参数列表置于返回值前。如: publicclassExampleA{ publicvoidf(Tx){ System.out.println(x.getClass().getName()); }使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。限制泛型的可用类型: 在上面的例子中,由于没有限制classGenericsFoo类型持有者T的范围,实际上这里的限定类型相当于Object,这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类型。只需要这么做: cl
4、assGenericsFoo,这样类中的泛型T只能是Collection接口的实现类,传入非Collection接口编译会出错。 注意:这里的限定使用关键字extends,后面可以是类也可以是接口。但这里的extends已经不是继承的含义了,应该理解为T类型是实现Collection接口的类型,或者T是继承了XX类的类型。 下面继续对上面的例子改进,我只要实现了集合接口的类型: publicclassCollectionGenFoo{ priva
5、teTx; publicCollectionGenFoo(Tx){ this.x=x; } publicTgetX(){ returnx; } publicvoidsetX(Tx){ this.x=x; } }通配符泛型: 为了解决类型被限制死了不能动态根据实例来确定的缺点,引入了“通配符泛型”,针对上面的例子,使用通配泛型格式为,“?”代表未知类型,这个类型是实现Collection接口。那么上面实现的方式可以写为: publicclassCollectionGenFooDemo{ publicstatic
6、voidmain(Stringargs[]){ CollectionGenFoolistFoo=null; listFoo=newCollectionGenFoo(newArrayList()); //现在不会出错了 CollectionGenFoolistFoo1=null; listFoo=newCollectionGenFoo(newArrayList()); System.out.println("实例化成功!"); } } 注意: 1、如
7、果只指定了>,而没有extends,则默认是允许Object及其下的任何Java类了。也就是任意类。 2、通配符泛型不单可以向下限制,如,还可以向上限制,如,表示类型只能接受Double及其上层父类类型,如Number、Object类型的实例。 3、泛型类定义可以有多个泛型参数,中间用逗号隔开,还可以定义泛型接口,泛型方法。这些都泛型类中泛型的使用规则类似。
此文档下载收益归作者所有