网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.一个进行Base64编码的类.
.小技巧:在.NET下编写中文代码程.
.JXTA技术与应用发展.
.WebLogic UDDI Client API实例学.
.开源项目关于web app的Log4j应用.
.Java Web应用中如何实现任务有效.
.使用高级UI制作简单计算程序.
.JAVA静态变量.
.IT人才风向标之java——java人才.
.X3D实战基础讲座之一.
.拖放 Eclipse Workbench 标签.
.基于NetBeans比较Java EE 5和J2E.
.Java Applet编程显示图像(1).
.使用MIDP2.0开发游戏(6)设计Clock.
.利用Java Swing设计标准对话框.
.中国招商银行方案.
.关于线程的讲解?.
.Hibernate配置文件中映射元素详解.
.怎样为JAVA应用程序设置时间区.
.Servlet 2.1规范概述(中文版).

Java高级编程——泛型类型 第二部分

发表日期:2008-1-5



  创建泛型和泛型方法
  
  创建一个简单的泛型是非常轻易的。首先,在一对尖括号(< >)中声明类型变量,以逗号间隔变量名列表。在类的实例变量和方法中,可以在任何类型的地方使用那些类型变量。切记,类型变量仅在编译时存在,所以不能使用instanceof和new这类运行时操作符来操作类型变量。
  
  让我们以一个简单的例子来开始这部分的学习,而后将精简这个例子。这段代码定义了一个树形数据结构,使用类型变量V代表存储在各个树结点中的值。
  
  import Java.util.*;/** * A tree is a data strUCture that holds values of type V. * Each tree has a single value of type V and can have any number of * branches, each of which is itself a Tree. */public class Tree<V> {  // The value of the tree is of type V.  V value;  // A Tree<V> can have branches, each of which is also a Tree<V>  List<Tree<V>> branches = new ArrayList<Tree<V>>();  // Here's the constructor. Note the use of the type variable V.  public Tree(V value) { this.value = value; }
  // These are instance methods for manipulating the node value and branches.
  // Note the use of the type variable V in the arguments or return types.
  V getValue() { return value; }
  void setValue(V value) { this.value = value; }
  int getNumBranches() { return branches.size(); }
  Tree<V> getBranch(int n) { return branches.get(n); }
  void addBranch(Tree<V> branch) { branches.add(branch); }}
  
  正如你所看到的,命名一个类型变量习惯于一个大写字母。使用一个字母可以同现实中那些具有描述性的,长的实际变量名有所区别。使用大写字母要同变量命名规则一致,并且要区别于局部变量,方法参数,成员变量,而这些变量经常使用一个小写字母。集合类中,比如java.util中经常使用类型变量E代表“Element type”。T和S经常用来表示范型变量名(似乎使用i和j作为循环变量一样)。
  
  注重到,当一个变量被声明为泛型时,只能被实例变量和方法调用(还有内嵌类型)而不能被静态变量和方法调用。原因很简单,参数化的泛型是一些实例。静态成员是被类的实例和参数化的类所共享的,所以静态成员不应该有类型参数和他们关联。方法,包括静态方法,可以声明和使用他们自己的类型参数,但是,调用这样一个方法,可以被不同地参数化。这些内容将在本章后面谈到。
  
  类型变量绑定
  
  上面例子中的Tree<V>中的类型变量V是不受约束的:Tree可以被参数化为任何类型。以前我们经常会设置一些约束条件在需要使用的类型上:也许我们需要强制一个类型参数实现一个或多个接口,或是一个特定类的子类。这可以通过指明类型绑定来完成。我们已经看到了统配符的上界,而且使用简单的语法可以指定一般类型变量的上界。后面的代码,还是使用Tree这个例子,并且通过实现Serializable和Comparable来重写。为了做到这点,例子中使用类型变量绑定来确保值类型的Serializable和Comparable。
  
  import java.io.Serializable;import java.util.*;public class Tree<V extends Serializable & Comparable<V>>
  implements Serializable, Comparable<Tree<V>>{
  V value;
  List<Tree<V>> branches = new ArrayList<Tree<V>>();
  public Tree(V value) { this.value = value; }
  // Instance methods  V getValue() { return value; }
  void setValue(V value) { this.value = value; }
  int getNumBranches() { return branches.size(); }
  Tree<V> getBranch(int n) { return branches.get(n); }
  void addBranch(Tree<V> branch) { branches.add(branch); }
  // This method is a nonrecursive implementation of Comparable<Tree<V>>
  // It only compares the value of this node and ignores branches.
  public int compareTo(Tree<V> that) {
  if (this.value == null && that.value == null) return 0;
  if (this.value == null) return -1;
  if (that.value == null) return 1;
  return this.value.compareTo(that.value);
  }
  // javac -Xlint warns us if we omit this field in a Serializable class
  private static final long serialVersionUID = 833546143621133467L;}
  
  一个类型变量的绑定是通过extends后的名字和一个类型列表(这可以是参数化的,就像Comparable一样)表达的。
上一篇:Java 各类本地接口——规范大全 人气:791
下一篇:分享关于Java 语言中的函数编程 人气:701
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐