前言
一般类方法只能使用具体的类型,无法适用于多种类型的代码。即使是继承体系或者接口实现等方法,还是会有很多约束,无法编写出更通用的代码。Java5以后,为创造容器类促成了泛型的产生。
简介
泛型字面上含义指一般的类型,通过一些符号代码某很多的类型,可以有边界也可以指所有类型。容器本身就支持各种各样的类型对象,泛型在容器中广泛应用。泛型可被应用与接口、方法,可以被擦除或者添加界限。
泛型接口
1 | // 泛型接口 |
输出结果
1 | "E:\Program Files\Java\jdk1.8.0_91\bin\java" "-javaagent:D:\Program …… |
泛型方法
1 | public class GeneralMethod { |
输出结果
1 | "E:\Program Files\Java\jdk1.8.0_91\bin\java" "-javaagent:D:\Program …… |
擦除
java泛型是通过擦除实现的,容器中泛型被指定为具体类型时会被擦除。List\
1 | public class erase { |
输出结果为
1 | "E:\Program Files\Java\jdk1.8.0_91\bin\java" "-javaagent:D:\Program …… |
边界
泛型没有边界时只能使用Object的方法,无法使用指定类型的方法,若想使用指定类型的方法必须加上边界。java泛型通过extends关键字添加边界,具体用法如下代码所示,泛型的边界为String,则泛型可以使用String特有的charAt()方法。
1 | public class boader { |
通配符
java中用?
表示通配符,通配符可与泛型结合使用,也可单独使用,既可以是无界的也可以加上范围。
1 | // 无界通配符 |
通配符与泛型使用起来既有共同点,也有区别。他们都可以代表所有的类型(无界),也可限定某些类型(有界)。但泛型一般必须要在接口或者方法头部用尖括号符号<>
声明,而且泛型可以不配合容器类或者Class等类使用,泛型可以单独使用,但通配符?
不可以单独使用,代码如下所示。而且通配符一般用于返回结果。当返回结果的类型不确定时,而又不想在方法或者接口处声明泛型时,可以用通配符来实现。
1 | Class<T> cls; |