1.泛型
1.1为什么要使用泛型
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
示例:
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("helloWorld");
arrayList.add('hello');
arrayList.add(88);
// 在编译阶段,编译器就会报错
// 因为上面使用泛型实例化对象时已经限定了该对象的类型 为 String类型
1.2 什么是泛型
泛型:
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,而这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口。
注意:
一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
1.3 使用泛型的好处
避免了类型强转的麻烦。
它提供了编译期的类型安全,确保在泛型类型(通常为泛型集合)上只能使用正确类型的对象,避免了在运行时出现ClassCastException。
1.4 泛型的使用
泛型通常会被大量的使用在集合当中。
泛型有三种使用方式,分别为:泛型类、泛型方法、泛型接口。
将数据类型作为参数进行传递。
1.4.1带有泛型的方法
泛型方法,是在调用方法的时候指明泛型的具体类型 。
泛型方法和成员方法语法格式的对比:
成员方法的语法格式:
权限修饰符 返回值类型 方法的名字(参数列表){
}
带有泛型的方法语法格式:
权限修饰符 <泛型通配符> 返回值类型 方法的名字(参数列表){
}
四种方法格式:
无参无返回值的方法
无参有返回值的方法
(一般来讲无参的泛型方法没有什么意义)
有参无返回值的方法
有参有返回值的方法
(所以我们在定义泛型方法时,通常使用含参数的)