以下这个例子选自<< Thinking in java >> , 本人觉得很有启发,在此与大家分享一下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ht.example;
/**
* @version 1.2
* @author ht
*/
//这个例子用于生成能自动识别类型的Vector,用来弥补JAVA的缺陷
import java.util.*;
//地鼠类
class Gopher
{
private int gopherNumber;
/**
* Constructor of Gopher 构造方法
* @param i <int>
*/
Gopher( int i )
{
gopherNumber = i;
}
/**
* print 用于打印信息
* @param msg <String>
*/
public void print( String msg )
{
if( msg != null )
System.out.println("MSG:"+msg);
System.out.println( "GopherNumber is " + gopherNumber );
}
}
//绊倒地鼠
class GopherTrip
{
/**
* caughtGopher()方法
* @param g <Gopher>
*/
static void caughtGopher( Gopher g )
{
g.print( "caught one!" );
}
}
public class GopherVector
{
//Vector 类可以实现可增长的对象数组。
//与数组一样,它包含可以使用整数索引进行访问的组件。
//在此用私有的Vector
private Vector v = new Vector();
/**
*addElement() 添加元素 , 在这里元素类型只能是Gopher[地鼠],所以在编译时就会执行类型检查
* 不会允许你添加其它类型
*@param g <Gopher>
*@return void
*/
public void addElement( Gopher g )
{
v.addElement(g);
}
/**
*elementAt() 此方法通过索引返回需要的Gopher
* @param i <int>
* @return v.elementAt(i) <Gopher> 注意:返回类型为Gopher
*/
public Gopher elementAt( int i )
{
//注意类型转换
return (Gopher)v.elementAt(i);
}
/**
* size() 返回 v <Vector> 中 元素个数
* @param null
* @return v.size <int>
*/
public int size()
{
return v.size();
}
/**
* main()
* @param args
*/
public static void main( String args[] )
{
//创建一个地鼠集合
GopherVector g = new GopherVector();
//往地鼠集合中添加元素,元素的类型必须是地鼠类型
for( int i = 0 ; i < 3; i ++ )
{
g.addElement(new Gopher(i));
}
//通过绊倒地鼠类的静态抓地鼠方法抓地鼠
//
for( int i = 0 ; i < g.size() ; i ++ )
{
GopherTrip.caughtGopher(g.elementAt(i));
}
}
}
/**Result
* MSG:caught one!
* GopherNumber is 0
* MSG:caught one!
* GopherNumber is 1
* MSG:caught one!
* GopherNumber is 2
*/
这个例子对于要添加的对象类型有严格的限制,在代码的角度来说,此方法沉闷乏味,但如果你用了错误的类型,他会立刻告诉你,编译时类型检查,而不是运行时类型检查(RTTI)