一般的类和方法,只能使用具体的类型,要么是基本类型,要么是
自定义的类,如果要编写可以应用于多种类型的代码,这是
泛型就起到了非常重要的作用。
“泛型”的意思是:“适用于许多许多的类型”。它实现了参数化类型的概念,使代码可以应用于多种类型。泛型的出现其中最引人注目的原因就是创造容器类。容器就是用来存放要使用对象的地方。数组也是如此,不过与简单的数组相比,容器类更加的灵活,具备更多不同的功能。
一元组类库
元组的概念: 它是将一元组对象直接打包存储于其中的一个单一的对象。这个容器对象允许读取其中的元素,但是不允许向其中存放新的对象
例一:
public
class TwoTuple<A,B>{
public final A first;
public final Bsecond;
public TwoTuple(A a,B b) { first = a; second = b;}
public String toString() {
return"("+first+","+secod+")";
}
}
上面这个
例子是一个二维元组,它能够持有两个对象。
构造器捕获了要存储的对象,而toString()是一个便利函数,用来显示列表中的值。
泛型方法
泛型除了应用于整个类上。还可以在类中包含参数化方法,而这个方法所在的类可以是泛型类,也可以不是泛型类。也就是说,是否拥有泛型方法,与其所在的类是否是泛型没有关系。
泛型方法使得该方法能够独立与类而产生变化。以下是一个基本的指导原则:无论何时,只要你能做到,你就应该尽量使用泛型方法。
要定义泛型方法,只需将泛型参数列表置于返回值之前,就像下面这样:
public class GenericMethods {
public <T> void f(T x) {
System.out.println(x.getClass().getName());
}
public static void main(String[] args) {
GenericMethods gm = new GenericMethods();
gm.f("");
gm.f(1);
gm.f(1,0);
gm.f(1.0F);
gm.f('c');
gm.f(gm);
}
}
GenericMethods并不是参数化的,尽管这个类和其内部的方法可以同时被参数化,但是在这个例子中,只有方法f()拥有类型参数。这是由该方法的返回类型前面的类型参数列表指明的。