泛型是JDK1.5版本新出的内容, 它在一定程度上保证了程序的安全性,
泛型简单的说就是在 容器(比如集合)后面指定该容器存放的内容的类型。
ArrayList<String> al = new ArrayList<String>();
al.add(4);
该代码是错误的, 因为ArrayList 后面的<String>指定了该集合存放的是String类型的数据, 但是 后面添加的是Integer类型。所以错误(参数不匹配)。
泛型类:
泛型类就是使用该类的对象可以变化。
比如 我定义了一个学生对象, 定义了一个Tool类用来操作学生对象; 然后我又定义了一个老师类, 定义一个Tool类来操作老师对象, 这样下去 我每次定义一个对象就要定义一个Tool类来操作该对象, 这样就很烦, 所以可以将Tool类定义为 泛型类, 这样无论是什么对象 都可以通过这个Tool类来操作。
import java.util.*;
class GenericClassDemo
{
public static void main(String[] args)
{
Tools<Worker> u = new Tools<Worker>();
u.setObject(new Worker());
Worker w = u.getObject();
}
}
// 这种方式比定义参数为Object类更加常见, 更好
class Tools<Q>
{
private Q q;
public void setObject(Q q)
{
this.q = q;
}
public Q getObject()
{
return q;
}
}
class Worker
{
}
class Student
{
}
泛型方法:
泛型类定义的泛型在整个类中有效,如果方法被使用,那么泛型类的对象明确要操作具体类型之后, 所有要操作的类型就已经固定了。
为了让不同的方法可以操作不同的类型, 而且类型不确定, 就可以定义泛型方法。
泛型方法的定义; 就是在该方法的返回值前面(修饰符后面)加上该方法的参数类型。
public <T> void show(T t) // 注意这个泛型<T>的有效区域只有这个方法之中,
{
System.out.println("show:"+t);
}
其实泛型方法也就是都可以改变方法的 参数类型。
泛型方法的类型可以与泛型类的类型不一致。
注意一点: 静态方法的泛型不能与类的泛型一致。 因为静态比类先加载。
如果静态方法操作的引用数据类型不确定, 可以定义一个与类泛型不同的静态泛型方法。