泛型是JDK 5.0后出现新概念,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型类引入的好处不仅在于减少代码量,还在于一提供了编译时期数据类型的检查功能,可以提前预知错误的发生,增加代码安全性,二是减少了强制类型转换。下面定义一个泛型类
Example GenericFX.java
package org;
public class GenericFX<E>
{
private E fx;
public void setFX(E fx)
{
this.fx = fx;
}
public E getFX()
{
return fx;
}
}
在此例中,GenericFX类就是要定义的泛型类,类型变量E是泛型类的类型参数,我们可以使用GenericFX<E>这样的类型名来声明一个泛型类。如
GenericFX<E> fx = new GenericFX<E>(),其中E就是具体的类型, 下面看一个应用泛型类的例子.
Example GenericFXDemo.java
package org;
public class GenericFXDemo
{
public void main(String[] args)
{
GenericFX<Integer> f1 = new GenericFX<Integer>();
GenericFX<Boolean> f2 = new GenericFX<Boolean>();
f1.setFX(new Integer(10));
System.out.println(f1.getFX);//
f2.setFX(new Boolean(true));
System.out.println(f2.getFX);//
}
}
可以看到,f1,f2都是同一泛型类的对象引用,在取得不同参数类型对象时,已不需要实行类型转换.
如果像这样修改一下代码,
f1.setFX(new Integer(10));
Boolean b = f1.getFX();
System.out.println(b); 这里编译就会报错,告诉你这不安全.
泛型类可以定义多个类型参数,像GenericFX<E,F>就要两个类型参数。但是,无论有多少个类型参数,泛型仍然只需要一个类。如上GenericFX<Integer> ,GenericFX<Boolean>都属于同一个泛型类GenericFX,f1,f2都只是该泛型类的一个应用,当然单一的GenericFX类是不能称为泛型类的,必须要有<>和类型参数才可以,而像fx只是泛型类的成员变量。