玩转范型—高级篇.doc

玩转范型—高级篇.doc

ID:55470000

大小:55.00 KB

页数:4页

时间:2020-05-14

玩转范型—高级篇.doc_第1页
玩转范型—高级篇.doc_第2页
玩转范型—高级篇.doc_第3页
玩转范型—高级篇.doc_第4页
资源描述:

《玩转范型—高级篇.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、JDK6新特性系列——玩转范型(高级篇)范型的语法元素其实是很基本的,只不过将这种语法来回扩展以后,可以编写出相当复杂的范型定义,然而无论再怎么复杂的写法,基本语法大致不变:限制范型可用类型、使用类型通配符,以及范型的扩充与继承几个语法。限制范型可用类型在定义范型类时,默认可以使用任何的类型来实例化范型类中类型持有者,但假设想要限制使用范型类时,如何用某个特定类型或其子类来实例化类型持有者呢?可以在定义类型持有者时,同时使用extends指定这个类型持有者实例化,实例化的对象必须是扩充自某个类型或实现某接口ListGenericFoo在声明类型持有者时,一并指定

2、这个持有者实例化的对象,必须是实现java.util.List接口的类。在限定持有者时,无论要限定的对象是接口或类,都是使用extends关键词。程序中使用extends限定类型持有者实例化的对象,必须是实现List接口的类,象java.util.LinkedList与java.util.ArrayList就实现了List接口,那么如下代码片段是合法的使用方式:但如果不是实现List的类,编译时就会发生错误。例如下面的程序片段通不过编译:因为java.util.HashMap并没有实现List接口(事实上HashMap实现了Map接口),编译器会在编译时检查出这

3、个错误:typeparameterjava.util.HashMapisnotwithinitsboundListGenericFoofoo1=newListGenericFoo();HashMap并没有实现List接口,所以无法作为实例化类型持有者的对象,事实上,当没有使用extends关键字限定类型持有者时,默认是Object下的所有子类都可以实例化类型持有者。也就是说,在定义范型类时如果只写以下代码:其实就相当于以下的定义方法:类型通配符假设使用GenericFoo类来像下面这样声明名称:GenericFoo

4、er>foo1=null;GenericFoofoo2=null;那么名称foo1就只能参考GenericFoo类型的实例,而名称foo2就只能参考GenericFoo类型的实例。也就是说,下面的方式的可行的:foo1=newGenericFoo();foo2=newGenericFoo();现在有一个要求,希望有一个参考名称foo可以像下面这样接受所指定的实例:foo1=newGenericFoo();foo2=newGenericFoo

5、dList>();简单的说,如果想要一个foo名称可以参考的对象,其类型持有者实例化的对象是实现List接口的类或其子类。要声明这么一个参考名称,可以使用?(通配符)。?代表未知类型,并使用extends关键字来作限定。例如:GenericFoofoo=null;foo=newGenericFoo();…foo=newGenericFoo();…表示类型未知,只知道是实现List接口的类,所以如果类型持有者实例化的对象不是实现List接口的类,则编译器会报告错误

6、。例如以下这行无法通过编译:GenericFoofoo=newGenericFoo();因为HashMap没有实现List接口,所以建立的GenericFoo实例不能指定给foo名称来参考,编译器会报告以下的错误:incompatibletypesfound:GenericFoorequired:GenericFooGenericFoofoo=newGenericFoo

7、();使用?来作限定有时是很有用的,例如若想要自定义一个showFoo()方法,方法的内容实现是针对String或其子类的实例而定制的。例如:publicvoidshowFoo(GenericFoofoo){//针对String或其子类而指定的内容}如果只作以上的声明,那么像GenericFoo、GenericFoo等类型都可以传入至方法汇总。如果不希望任何类型都可以传入showFoo()方法中,可以使用以下的方式来限制:publicvoidshowFoo(GenericFoofoo){//针对

8、String或其子类而制

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

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

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