欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JDK 1.5之Generics

程序员文章站 2023-12-12 12:47:58
generics 是jdk 1.5 一个最重要的特性,主要用来处理collection。   以下代码在jdk 1.5 调试通过。   代码实例1: demo.java  ...
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 myintlist = new linkedlist(); // 1'
  myintlist.add(new integer(0)); //2'
  integer x = myintlist.iterator().next(); // 3'
  }

  /**
  * 匿名字符的用法
  */

  public void test2() {
  list list = new arraylist();
  //通过匿名字符打印一个集合

  wildcards(list);
  wildcards1();
  /*
  * 如果 wildcards2 定义为wildcards2(list 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();
  //c.add(new object()); // compile time error

  //以上为错误的用法,因为不能确定 c 的类型 ,不能使用add ,但get可以 。正确的用法如下:

  arraylist c = new arraylist();
  c.add("test");
  list< ? > list = c;
  log(c.get(0));
  }

  public void wildcards2(list< ? extends shape> shapes) {
  //list shapes 定义只能接受list shapes,也不能接受 list
  for (shape s : shapes) {
  s.draw();
  }

  //以下写法错误,因为为参数申明为 extends shpape,无法确定rectangle 为shape子类,属于不安全调用
  //shapes.add(0, new rectangle());

  map alldrivers = new hashmap();
  census.addregistry(alldrivers);
  //以下写法允许,因为drivers明确定义,
  list drivers = new arraylist();
  census.add(drivers);
  }

  /**
  * generic methods 的用法
  *
  */

  public void test3() {
  //适用于各种类型的函数
  object[] oa = new object[100];
  collection

上一篇:

下一篇: