泛型:
在进行程序的编写时,有时我们在定义某些类、方法、变量时,需要支持多种类型的数据,因此,为避免重复、增加程序的复用性,我们可以使用泛型编写、设计组件,提升组件的适用性与灵活性。
使用泛型的语言常见的有java、C#等。
简单来说,泛型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持。
但作为提升复用性的代价,泛型组件的使用舍弃了具体数据类型变量中的大多数方法。此外,泛型的限制性还有:
- 泛型变量不能使用基本类型实例化类型参数;
- 运行时类型查询只适用于原始类型;
- 不能创建参数化类型的数组;
- 不能实例化类型变量;
- 不能构造泛型数组;
- ……
泛型方法:
public static <T> T getMiddle(T... a) {
return a[a.length / 2];
}
典型泛型方法如上,返回任意类型的数组的中间元素,T可以被任意数据类型取代。
泛型类:
java语言中典型的泛型类如ArrayList、Set等,下面是一个简单泛型类的声明:
public class Pair<T> {
private T f;
private T s;
public Pair() {
f = null;
s = null;
}
public Pair(T f, T s) {
this.f = f;
this.s = s;
}
public getF() {
return f;
}
public getS() {
return s;
}
}
通配符:
为解决泛型在使用中的限制,java语言提出了通配符的概念:
在通配符类型中,允许类型参数发生变化。例如:
Pair<? extends Emloyee>
表示泛型Pair类型,其类型参数时Employee的子类,并可以调用Employee类中的方法。
通配符的功能于泛型大体相同,只不过对数据类型的要求更加具体化,因此大多数时候都可以使用泛型方法来代替类型通配符。
版权声明:本文为qq1793987019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。