选择显示字体大小

用j2se 5.0创建定制的泛型集合


  j2se 5.0引入了许多新型的集合api-你需要了解它们以便能够正确地实现泛型定制的集合-它可以无缝地与多种类型和新型的"for each"结构一起工作。本文将向你展示示怎样创建与j2se最新特征相兼容的集合。

  一、 创建支持泛型的类

  首先,你必须学习如何创建一个允许存在"泛型类型"的类。这意味着无论何时实例化你的类,你都能够指定一个或多个java类型与该类相关联。为了说明这个问题,请考虑列表1中的一个简单示例类。

  注意,列表1中的类是如何声明的。它在尖括号之间指定三个泛型。这些泛型是真实类型的占位符。当你声明一个这种类型的类时,你可以指定一个类来代替one,two和three。如果你不这样做,那么该类将使用object的默认类型。

  这个类显示出怎样设计一个类来接收三个泛型类型。当你创建一个这种类型的类时你要支持准确的类型。

  列表1.泛型类:

package com.heatonresearch.examples.collections;
public class example<one, two, three> {
 private one one;
 private two two;
 private three three;
 public one getone() { return one; }
 public void setone(one one) { this.one = one; }
 public three getthree() { return three; }
 public void setthree(three three) { this.three = three; }
 public two gettwo() { return two; }
 public void settwo(two two) { this.two = two; }
 public static void main(string args[]) {
  example<double, integer, string> example = new
  example<double, integer, string>();
  example.setone(1.5);
  example.settwo(2);
  example.setthree("three");
 }
}

  下面是如何实例化一个example类型的类的情形:

example example=new example();

  前面的代码将代替具体的double,integer和string类型-相当于在列表1中的"one"、"two"和"three"占位符。你可以看到这些变量都有这些类型,通过下面三行设置它们的值。

example.setone(1.5);
example.settwo(2);
example.setthree("three");

  现在,既然你已经知道如何创建一个使用泛型的定制类,那么创建一个使用泛型的定制集合类则更为简单些。

  二、 创建一个queue类

  一个队列是一个很有用的数据结构。为了理解一个队列的功能,你可以想像在一个娱乐公园人们排队骑马的情形。人们从队的后面进入到队中。为此,他们等待而最后到达队伍的前端。其顺序不能改变。

  这种情形可以被应用到一个队列类上去。它共有两个方法,分别是"push"和"pop"。你使用push方法来把对象放置到队列中,而使用pop方法从队列中删除一项。例如,如果你使用push方法把三个对象添加到队列上,那么连续调用pop三次将以同样顺序从队列中删除这三个元素。这正与娱乐公园的情形相一致。如果有三个人以一特定的顺序进入队中,他们将以相同的顺序得到骑马娱乐。

  下列代码显示出怎么实现一个使用泛型的java队列。

package com.heatonresearch.examples.collections;
import java.util.*;
public class queue {
private arraylist list = new arraylist();
public void push(t obj) { list.add(obj); }
public t pop() throws queueexception {
if (size() == 0)
throw new queueexception(
"tried to pop something from the queue, " +
"when it was empty");
t result = list.get(0);
list.remove(0);
return result;
}
public boolean isempty() { return list.isempty(); }
public int size() { return list.size(); }
public void clear() { list.clear(); }
}

  前面的代码声明了队列类,这样它可以接收一个泛型类型。

public class queue

  泛型类型"t"是该类类型-它将被放入到该队列中去。为了把这些项存储到一个队列中,该类还要创建一个接收"t"类型的arraylist。
push方法很简单的。它接收单一的类型为泛型"t"的对象,并且把它添加到arraylist上。

  pop方法稍微复杂些。首先,如果你要从队列中弹出一个对象,并且如果在队列中没有对象,那么该类将抛出一个queueexception类型的异常。下面是queueexception类。

package com.heatonresearch.examples.collections;
public class queueexception extends exception {
 public queueexception(string msg) {
  super(msg);
 }
}

  下面是抛出queueexception类型异常的代码:

if (size() == 0)
throw new queueexception("tried to pop something from the queue, " +
"when it was empty");

  如果队列不空,该方法将从队列中检索最后一个元素,在一个名叫result的变量中存储它,然后从该列表中删除这个项。下面几行代码实现了这一功能:

t result = list.get(0);
list.remove(0);
return result;

  注意,该临时变量也是泛型类型"t"。当这个类与真实的代表泛型类型的java类型一起使用时,为了实现最大程度上的兼容性,无论你何时存取这些变量,确保总是使用泛型类型是非常重要的。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons