快速业务通道

JDK 1.5的Generics功能使用实例 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

JDK 1.5的Generics功能使用实例

时间:2010-12-04 毛翔

Generics 是JDK 1.5 一个最重要的特性,主要用来处理Collection。

以下代码在JDK 1.5 调试通过。

代码实例1: Demo.java

package maoxiang.examples.jdk15.generics; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * @author 毛翔 * * 演示如何使用Generics 特性。代码来自于 Generics 教程: * http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf * * Generics类似于C++中的模板。 * 区别: * 1. * 2. */ public class Demo {   public static void main(String[] args) {}   /**   * 最简单的用法   */   public void Test1() {    // 以前的用法    //List myIntList = new LinkedList(); // 1    //myIntList.add(new Integer(0)); // 2    //Integer x = (Integer) myIntList.iterator().next(); // 3 需要强 制转换    // 1.5 的用法    List<Integer> myIntList = new LinkedList<Integer>(); // 1’    myIntList.add(new Integer(0)); //2’    Integer x = myIntList.iterator().next(); // 3’   }   /**   * 匿名字符的用法   */   public void Test2() {    List<Circle> list = new ArrayList<Circle>();    //通过匿名字符打印一个集合    Wildcards(list);    Wildcards1();    /*    * 如果 Wildcards2 定义为Wildcards2(List <Shape> shapes)    * 以下调用错误    */    Wildcards2(list);   }   public void Wildcards(Collection< ? > c) {    // 以前的用法    //Iterator i = c.iterator();    //for (int k = 0; k < c.size(); k++) {    //    log(i.next());   //}   //1.5 的用法   //Collection<?> c 表示   for (Object e : c) {    log(e);   } } public void Wildcards1() {   //Collection<?> c = new ArrayList<String>();   //c.add(new Object()); // compile time error   //以上为错误的用法,因为不能确定 c 的类型 ,不能使用add ,但get可以 。正确的用法如下:   ArrayList<String> c = new ArrayList<String>();   c.add("test");   List< ? > list = c;   log(c.get(0)); } public void Wildcards2(List< ? extends Shape> shapes) {   //List<Shape> shapes 定义只能接受List<Shape> shapes,也 不能接受 List<Circle>   for (Shape s : shapes) {    s.draw();   }   //以下写法错误,因为为参数申明为 extends Shpape,无法确定Rectangle 为Shape子类,属于不安全调用   //shapes.add(0, new Rectangle());   Map<String, Driver> allDrivers = new HashMap<String, Driver>();   Census.addRegistry(allDrivers);   //以下写法允许,因为drivers明确定义,   List<Driver> drivers = new ArrayList<Driver>();   Census.add(drivers); } /** * Generic Methods 的用法 * */ public void Test3() {   //适用于各种类型的函数   Object[] oa = new Object[100];   Collection<Object> co = new ArrayList<Object>();   fromArrayToCollection(oa, co);// T inferred to be Object   String[] sa = new String[100];   Collection<String> cs = new ArrayList<String>();   fromArrayToCollection(sa,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号