在哪儿需要用泛型?
其实,泛型就是一个修饰词,可有可无。像我们语法结构中的定语一样。去掉,也能表达基本意思,但是要理解起来就比较费劲。在Java中泛型也有点类似的感觉,不用泛型,也能实现这些想要的功能。但是,比较费劲。
而这个修饰词,可以用在类上、接口上、方法上。总而言之,一句话,只要是需要用到数据类型的地方,都可以使用泛型的数据类型。也就是将我们的数据类型变成一种通用的类型,将其参数化。具体使用的时候,传入具体的实参值,使得数据类型得以确定。
泛型类和泛型接口
类型被参数化的类或者接口,也就是说用一种通用的类型来表示类或者接口的类型,在具体使用的时候再传入具体的类型的类或者接口,就叫泛型类、泛型接口。
从泛型类、泛型接口派生子类
注意:实际上,并不存在泛型类在物理上,泛型类只是一个逻辑上的概念,仅在编译期存在。
泛型方法
定义和概念
所谓泛型方法,就是在方法的签名中使用了类型化的形参,或者说使用了类型被参数化的类型。
例如:
public static <T> int countGreaterThan(T[] anArray, T elem) {
int count = 0;
for (T e : anArray)
if (e > elem) // compiler error
++count;
return count;
}
为什么要有泛型方法?
因为,有的时候,我们仅仅是希望在我们的某个类或者接口中的其中一个或者两个方法使用泛型技术。而不是在整个类、接口的级别上使用泛型。
泛型方法和类型通配符的关系?
通常情况下,在使用类型通配符的地方,都可以用我们的泛型方法来进行替代。
类型通配符:既可以在方法签名的形参中使用,也可以直接在定义变量时使用。
泛型方法:类型形参,只能在方法中显示申明
泛型方法的应用场景:
- 当我们需要使用类型行参来进表示一个或者多个参数间的类型依赖关系的时候。
- 方法返回值和方法的形参之间的类型依赖关系
类型通配符的应用场景:
被设计用来支持灵活的子类化的。因此,在不适合使用泛型方法的地方,我们通常使用类型通配符