如果你的E文还OK的话,可以直接略过本文,直接参考SUN 官方文档,链接如下:
http://java.sun.com/docs/books/tutorial/java/generics/gentypes.html
(CSND的Blog可能出问题了,下面格式看了很难受,没办法!)
直接给出一个泛型的简单范例
/**
* Box 类的泛型版本
*一个可以放任何对象的Box类,里面只有两个简单的存取方法!
*/
public class Box<T> {
private T t; // T 表示 Type(类型)
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
下面是使用它的代码
public class BoxDemo3 {
public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
Integer someInteger = integerBox.get(); // no cast!
System.out.println(someInteger);
}
}
-----------------------------------无聊的分割线--------------------------------------
泛型很类似C++中的模板的概念(但据说没有那么强大),或者你可以把它看成一种特殊的类型变量,它的值是你传进去的 类型 !这些类型
可以是任何 类 类型,接口类型,甚至是其他类型变量!上面的那个T也叫formal type parameter(形式类型参数,
形参的类型版本)
在没有泛型的日子里,上面的代码是这样写的:
public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() { return object; } }
public class BoxDemo1 {
public static void main(String[] args) {
// ONLY place Integer objects into this box!
//你只能通过注释来告知只能把Integer放入box对象里
Box integerBox = new Box();
integerBox.add(new Integer(10));
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger);
}
}
传统做法的弊端是,如果你放入的不是integerBox.add(new Integer(10))的那个10,放入一个字符串,
这个错误只有在运行时才能监测出来(大项目中的调式将非常壮观!),而利用泛型在编译时期就可以监测出来!
时间有限,先写到这里,官网有详细资料!
第二次补充:泛型方法
<body>
<%!
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
//下面这个是泛型方法的声明和实现
public <U> void inspect(U u){
System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName());
}
}
%>
<%
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
//下面是调用一个泛型方法
integerBox.<String>inspect("some text");
%>
</body>